如何防止SQL返回多个结果集

时间:2012-09-04 14:31:39

标签: sql tsql resultset multiple-resultsets

我面临的问题是我有一个存储过程(让我们称之为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的结果。 (例如,用户表两次)。

2 个答案:

答案 0 :(得分:4)

首先,这是一个similiar question

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

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

1:返回多少行?

2:回归集有多宽?

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

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

答案 1 :(得分:3)

sp_one中,您可以使用

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

DROP TABLE #temporaryusers 

吞下你的结果。