-3

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

这同时具有 aEXEC和 aSELECT语句。

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

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

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

否则,只需抑制所有,然后让 MS Access 执行存储过程,然后只需拉出SELECT语句本身。

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

4

3 回答 3

3
SET FMTONLY ON;
GO
EXEC sp_who;

然而,它有副作用和奇怪的问题。例如,至少在 SQL Server 2012 中,如果您的过程具有 #temp 表,则会收到无效对象名称错误。Erland Sommarskog 在这里进行了更详细的介绍(只需搜索页面即可FMTONLY)。

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

ALTER PROCEDURE dbo.Whatever
  @SuppressDTSOutput BIT
AS
BEGIN
  SET NOCOUNT ON;

  ...

  IF @SuppressDTSOutput = 1
  BEGIN
    EXEC master..xp_cmdshell 'DTSRun.exe whatever', NO_OUTPUT;
  END
  ELSE
  BEGIN
    EXEC master..xp_cmdshell 'DTSRun.exe whatever';
  END

  ...
END
GO
于 2013-07-25T16:27:39.423 回答
1

您可以发出SET FMTONLY ON声明

这将抑制结果集。

于 2013-07-25T16:27:28.753 回答
0

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

1) 选择语句 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

于 2015-05-13T13:57:17.177 回答