【问题标题】:How to stop results of nested stored procedure showing up at top level?如何阻止嵌套存储过程的结果显示在顶层?
【发布时间】:2015-01-19 15:41:54
【问题描述】:

我已对现有存储过程 (dbo.pr1) 进行了更改,以便它现在调用第二个存储过程 (dbo.pr2)。

这两个存储过程都通过最终的 SELECT 查询返回数据。

在 dbo.pr1 中,我现在添加了以下行:

EXEC @var1 = dbo.pr2

我这样做是为了将 dbo.pr2 中的值分配给变量 @var1(dbo.pr2 返回一个位)。

但是,现在当我执行 dbo.pr1 时,我得到了两个结果,而不是预期的结果。我在 dbo.pr1 的末尾获得了 SELECT 查询结果,但我也从 dbo.pr2 获得了 SELECT 查询结果。

我无法更改 dbo.pr2,因为它正在系统的其他地方使用。当我执行 dbo.pr1 时,有没有办法可以阻止其结果显示?

【问题讨论】:

  • 我确定有 - 你能显示存储过程吗?
  • 如果您还没有,请尝试将其放入 pr2: SET NOCOUNT ON;
  • 另一个建议,如果这些存储过程的目的只是返回一个数据表,那么将它们更改为表值函数。
  • 语法:EXEC @var1 = dbo.pr2 只会接收在被调用过程中执行的RETURN 语句的值,并且仅当它是整数时。要返回 SELECT 的结果,您需要使用 INSERT ... EXEC ... 语法。

标签: sql sql-server tsql


【解决方案1】:

对调用者返回的内容做一些事情,

SET NOCOUNT ON;

...


DECLARE @resultsOfPr2 TABLE
(
    ...
);

INSERT @resultsOfPr2
EXEC @var1 = [dbo].[pr2];

Fiddle here


注意:我假设[dbo].[pr2] 选择了一个结果集。

【讨论】:

  • 是的。你在那儿建一张桌子吗?您将其注释掉的方式令人困惑。
  • 想写出这个确切的答案,准备了一个 SQLFiddle 来演示它,在这里发布它以帮助答案:sqlfiddle.com/#!3/592cc
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-02
  • 2014-06-19
  • 1970-01-01
  • 2016-08-07
  • 2014-05-23
  • 1970-01-01
相关资源
最近更新 更多