2012-08-22 47 views
2

我有一個存儲過程SP1,它使用SELECT語句返回兩個表T1和T2。我想在另一個存儲過程SP2中對T2執行一些操作。有人可以指導我如何做到這一點?從SQL Server獲取最後一個表存儲過程

+0

我不認爲你可以用SP做到這一點,你需要的是一個表值函數。 – yogi

+2

沒有辦法從TSQL中的存儲過程訪問第二個結果集。 如果兩個結果集都是聯合兼容的,那麼你可以'INSERT INTO @T EXEC YourProc',但是這會插入**兩個**結果集。 –

回答

2

選項1

變化SP1保存T2到一個表中,除了使用SELECT返回它。然後使用該表作爲SP2的輸入。

選項2

如果你無法改變SP1,你可以捕捉的存儲過程在一個表中的輸出。在StackOverflow上查看如何使用OPENROWSET或通過預先定義臨時表來執行此問題:How to SELECT * INTO [temp table] FROM [stored procedure]

如果T1和T2沒有相同的定義,則此選項將不起作用。如果他們有相同的定義,你可以導入這兩個結果集爲一個表如下:

--create a temporary table with the same definition as T1 and T2 
CREATE TABLE #temp (
    Col1 SOME DATATYPE, 
    Col2 SOME DATATYPE 
); 

--fill your temp table with the result sets of T1 and T2 
INSERT INTO #temp 
EXEC [dbo].[SP1]; 

但你必須處理T1-T2 Plus的表,而不是T2。

所以看來選項1是你最好的選擇。

+1

其實我試圖用選項2來實現它。但是謝謝你告訴選項1.非常感謝。 –

+0

不客氣!我可以想象你想要選擇2路由,必須說我有點驚訝,似乎沒有明顯的方式來處理來自SQL Server中的SP的多個結果集。 – Josien