2013-06-04 199 views
6

我有一個返回單個結果集的存儲過程。 我希望能夠把它和過濾結果行,是這樣的:過濾存儲過程的結果集

SELECT * FROM (CALL sproc()) AS sp WHERE sp.someField = 0; 

有沒有辦法做到這一點?

回答

4

有幾種方法可以解決這個問題。最簡單的方法就是修改存儲過程,讓你直接過濾結果集,但我出於某種原因假設你無法做到這一點。

你需要做的什麼是存儲過程的結果存儲在表/臨時表所示:

DECLARE @tablevar table(col1,.. 
INSERT INTO @tablevar(col1,..) exec MyStoredProc 'param1', 'param2' 

SELECT col1, col2 FROM @tablevar WHERE col1 = 'abc' 

編輯:如果你可以編輯子查詢:

老存儲過程: ... 選擇 * FROM 的MyTable WHERE Col1中= @參數1和 col2的= @ param2的

新的存儲過程:

.... 
SELECT 
* 
FROM 
    (SELECT 
     * 
    FROM 
     MyTable 
    WHERE 
     Col1 = @param1 AND 
     Col2 = @param2 
    ) a 
WHERE 
    Col3 = FilterRule1 

但也許我不會在這裏完全理解你的存儲過程。這裏的臨時表並不是真正最高性能的解決方案,可能會有點麻煩,但如果它對您有用,然後去用它,但我無法想象的情況下,你不能只修改你的存儲過程到使用子查詢而不是臨時表。

+1

我選擇將結果集存儲在SP中的臨時表中,然後查詢所述臨時表。 – Ozzyberto

+0

我很高興該解決方案爲你工作。如果你能夠更新存儲過程,可能有更好的方法來重新設計你的存儲過程而不必使用臨時表,但這可能比它的價值更麻煩。 –