【问题标题】:How to prevent SQL from returning multiple resultsets如何防止 SQL 返回多个结果集
【发布时间】:2012-09-04 14:31:38
【问题描述】:

我面临的问题是我有一个存储过程(我们称之为 sp_one),它在运行期间调用另一个存储过程(我们称之为 sp_two)。

我只希望最后返回 sp_one 的结果集,而不是 sp_two 的结果集。我想有一种方法可以从 sp_two 捕获结果,这将阻止它们也被返回,但无法弄清楚它的语法。

有什么想法吗?

一些捕捉正在发生的本质的伪代码(不是我的实际代码):

CREATE PROCEDURE sp_two AS 
BEGIN
  update Users
  set is_valid = 0

  select * from Users
END


CREATE PROCEDURE sp_one
AS
BEGIN
  exec sp_two
  select * from Users
END

exec sp_one

运行 exec sp_one 的结果是 sp_two 的结果集,然后是 sp_one 的结果。 (例如,用户表两次)。

【问题讨论】:

  • 您是否单独从其他任何地方调用 sp_two?你需要在 sp_2 中有 select * from users 吗?否则为什么不能在 sp_1 中设置更新用户集 is_valid = 0?
  • 嗨,Daniel,不幸的是,我们这样做了——上面的例子过于简单化了,我保证 sp_two 真的很有用。

标签: sql tsql resultset multiple-resultsets


【解决方案1】:

首先,这是一个similiar question

我不建议使用这种解决方案,因为它很容易成为瓶颈。我想说您应该专注于以更清晰的方式进行数据处理(但是我知道您的问题示例只是一个理论示例)

但如果你真的想使用这样的东西,我会说衡量返回行的危险:

1:返回多少行?

2:返回集有多宽?

如果您认为“好吧,这没什么大不了”,那么我会说使用内存表而不是临时表(不要进行物理写入):

DECLARE @users TABLE (...fields here...)
INSERT INTO @users
EXEC sp_two 

【讨论】:

    【解决方案2】:

    sp_one,你可以使用

    CREATE TABLE #temporaryusers (Usertable fields here)
    INSERT INTO #temporaryusers 
    EXEC sp_two 
    
    DROP TABLE #temporaryusers 
    

    吞下你的结果。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多