2008-10-23 162 views
2

我有一個存儲過程,回滾一系列操作。我想從另一個SP中調用它。調用存儲過程中的存儲過程並返回記錄集

問題是內層SP返回一個記錄集,其中包含一個表示成功度的值。

這種方法運行良好,在我們的上下文中有一些優點,但回想起來,我會用傳統的方法來完成它的返回值或輸出參數。

可能總是改變這個SP使用這種方法,並修改調用代碼,但a)我不想涉足任何更多的代碼比我必須,和b)在智力水平,我我很好奇,看看有什麼替代解決方案,如果有的話。

如何(如果有的話)我可以調用這個SP並確定返回的單例記錄集的值?

感謝

回答

7

存儲過程返回設置像任何其他的記錄,這樣你就可以真正做到這一點:

INSERT INTO MyTable的( myvalue的 )

EXEC dbo.MyStoredProcedure

EXEC代替SELECT語句。要獲取該值,只需從插入的表中選擇SELECT。通常情況下,這將是一個臨時表。

+0

您也可以插入臨時表(不是內存表)。換句話說,你可以插入到#MyTempTable中,而不是@MyOtherTempTable。 – 2008-10-23 17:03:26

1

另一種選擇是將返回記錄集的存儲過程轉換爲返回表的函數。

如果您想最小化對系統的更改,Ant的方法可能是最好的。

通常情況下,您將使用該方法的臨時表,因爲您無法使用exec語句插入到表變量中。

1

這是一個變化,如果你需要將它用於MULTIPLE記錄集的話,它將很好地工作。

CREATE TABLE #outsidetable (...) 
exec spInsideProcedure 
SELECT * FROM #outsidetable 

內spInsideProcedure

INSERT INTO #outsidetable SELECT <blah blah blah> 
0

我試圖Ant的方法和它的工作一種享受:

 
Declare @Success tinyint 
Declare @Response Table (Success int) 
Insert into @Response(Success) 
Exec Fix_RollbackReturn 12345, 15 
Select @Success=Success from @Response 

正如你可以看到我用了一個表變量,而不是一個臨時表,因爲稍比臨時表高效。

感謝您的幫助。

編輯:看來,戴夫是最後的權利。也就是說,我在SQL2005開發機器上使用了Exec-into-Table-variable方法,但是當它移動到它所反對的Live(SQL2000)機器時,我不得不改用臨時表方法。

這有點煩人,特別是在幾周之後,我們正在全面升級到SQL2005(!)。