2012-06-29 39 views

回答

0

爲此,您可以創建SP2裏面一個臨時表,並在SP1中使用它

+0

確定嗎?我想如果它是在SP2 *(內部SP)中創建的*,那麼它的範圍限制在SP2的持續時間內。這意味着在執行返回到SP1 *(外部SP)*時它不再存在。那麼,臨時表需要在SP1中創建? – MatBailie

+0

你可以創建一個臨時表,但是沒有任何#TempTable,通常可以創建臨時表,並且在你使用它之後你將它放下 – Rednaxel

+0

然後它不是臨時表。 '@ table' =表變量。 '#table' =臨時表。 'table' =表。如果你的意思是一張桌子,在使用後你會掉落,不要把它叫做臨時桌子,這意味着別的東西。此外,這樣做有一個主要問題:如果兩個單獨的會話執行相同的SP,則表不能創建兩次。 – MatBailie

4

可以使用INSERT INTO <table> EXEC <sp>一個結果集。

但是這不適用於多個結果集。

而且你不能嵌套它。 (調用SP1時,SP2可以使用它。但SP3不能做同樣的事情,如果它調用SP2)。


如果你真的有多個結果集返回,您需要插入結果導入表格。然後外層SP可以使用這些表。

如果外部SP創建臨時表(CREATE TABLE #temp),那麼內部SP可以看到它插入一個臨時表。

同樣,你可以使用一個永久表。我建議有一個名爲SPID的列,並使用@@ spid作爲您插入其中的值。 (@@ spid唯一識別每個會話。)但是,您必須記住在插入表格後進行清理。


所有這些選項假設你可以修改兩個SP。如果你不能,我不確定你可以在SQL Server中執行此操作。

+2

「但是這對多個結果集不起作用。」:實際上,它*將*適用於多個結果集,但只有它們具有兼容的列定義(即,它們可以被聯合在一起,它們纔會有效)。 – RBarryYoung

相關問題