2012-09-04 34 views
3

我面臨的問題是我有一個存儲過程(讓它稱爲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

回答

3

sp_one,你可以使用

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

DROP TABLE #temporaryusers 

吞下你的結果。

4

首先,這裏是一個similiar question

我不推薦使用這種解決方案,因爲它很容易成爲瓶頸。我會說你應該專注於使數據處理更清晰(但我明白,你的問題的例子只是一個理論的例子)

但是,如果你真的想要使用這樣的事情,我會說測量危險返回行數:

1:有多少行返回?

2:返回集有多寬?

如果你覺得「確定它是不是什麼大不了的」,那麼我會說使用一個內存表,而不是臨時表(不要讓物理寫入):

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