如何防止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结果。 (例如用户表格两次)。
答
在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
你从任何地方拨打sp_two其他呢?你需要在sp_2中拥有来自用户的select *吗?否则为什么不能让更新用户在sp_1中设置is_valid = 0? –
嗨丹尼尔,不幸的是我们这样做 - 上面的例子是过度简化,我保证sp_two真的非常有用。 – Irfy