6
我有一個返回單個結果集的存儲過程。 我希望能夠把它和過濾結果行,是這樣的:過濾存儲過程的結果集
SELECT * FROM (CALL sproc()) AS sp WHERE sp.someField = 0;
有沒有辦法做到這一點?
我有一個返回單個結果集的存儲過程。 我希望能夠把它和過濾結果行,是這樣的:過濾存儲過程的結果集
SELECT * FROM (CALL sproc()) AS sp WHERE sp.someField = 0;
有沒有辦法做到這一點?
有幾種方法可以解決這個問題。最簡單的方法就是修改存儲過程,讓你直接過濾結果集,但我出於某種原因假設你無法做到這一點。
你需要做的什麼是存儲過程的結果存儲在表/臨時表所示:
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
但也許我不會在這裏完全理解你的存儲過程。這裏的臨時表並不是真正最高性能的解決方案,可能會有點麻煩,但如果它對您有用,然後去用它,但我無法想象的情況下,你不能只修改你的存儲過程到使用子查詢而不是臨時表。
我選擇將結果集存儲在SP中的臨時表中,然後查詢所述臨時表。 – Ozzyberto
我很高興該解決方案爲你工作。如果你能夠更新存儲過程,可能有更好的方法來重新設計你的存儲過程而不必使用臨時表,但這可能比它的價值更麻煩。 –