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

问题描述:

我面临的问题是我有一个存储过程(让它称为sp_one),它在运行过程中调用另一个存储过程(让它称为sp_two)。如何防止SQL返回多个结果集

我只想从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

你从任何地方拨打sp_two其他呢?你需要在sp_2中拥有来自用户的select *吗?否则为什么不能让更新用户在sp_1中设置is_valid = 0? –

+1

嗨丹尼尔,不幸的是我们这样做 - 上面的例子是过度简化,我保证sp_two真的非常有用。 – Irfy

sp_one,你可以使用

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

DROP TABLE #temporaryusers 

吞下你的结果。

首先,这里是一个similiar question

我不推荐使用这种解决方案,因为它很容易成为瓶颈。我会说你应该专注于使数据处理更清晰(但我明白,你的问题的例子只是一个理论的例子)

但是,如果你真的想要使用这样的事情,我会说测量危险返回行数:

1:有多少行返回?

2:返回集有多宽?

如果你觉得“确定它是不是什么大不了的”,那么我会说使用一个内存表,而不是临时表(不要让物理写入):

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