T-SQL存储过程没有结果

时间:2013-07-25 16:22:46

标签: tsql sql-server-2000

有没有办法抑制存储过程结果集的所有结果?

这包含EXECSELECT个陈述。

编辑:让我再解释一下我的问题。

EXEC语句执行DTSRun,它将ERP和MySQL服务器中的数据提取到SQL中的临时表中。一旦数据在临时表中。有一个Select语句将合并后的数据带回给用户。用户是MS Access数据库,通过电子邮件将其发送给实际客户。全部由客户端的网页按钮触发,并带有“获取报告”。

我想取消第一个EXEC语句结果集,因为我不希望客户看到DTS输出。

否则,只需按下all,然后让MS Access执行存储过程,然后只需拉出SELECT语句。

可能有10种更好的方法来做我正在做的事情。但我只是想知道在运行它时如何抑制EXEC语句的结果集。

3 个答案:

答案 0 :(得分:3)

SET FMTONLY ON;
GO
EXEC sp_who;

然而,它有副作用和奇怪的问题。例如,至少在SQL Server 2012中,如果您的过程具有#temp表,则会出现无效的对象名称错误。 Erland Sommarskog goes into a lot more detail here(只需搜索FMTONLY的页面)。

鉴于你的更新(我不知道你试图抑制DTSRun调用的输出),我认为更好的答案是:为存储过程添加一个标志,然后根据标志值,使用{ {1}} NO_OUTPUT的参数:

xp_cmdshell

答案 1 :(得分:1)

您可以发出SET FMTONLY ON声明

这将取消结果集。

答案 2 :(得分:0)

通常只有两种方法可以从存储过程中获取结果

1)选择Statement 2)OUTPUT关键字

抑制我通常使用的结果的最方便的方法是将结果存储在表格中或将列值存储到变量(下面的示例)

DECLARE @REF_Tool_Property_Name VARCHAR(20) SELECT @REF_Tool_Property_Name = Tool_Property_Name FROM Tool_Property WHERE Tool_Property_Name = @Member