2011-05-16 28 views
1

我現在有一個主存儲過程調用許多存儲過程:在SQL Server中使用存儲過程之間的臨時表2008

Main --| 
    --| 
     --| > Exec Pre-processing SP (create and populate #temp table) 
    --| 
     --| > Exec Actual update 
    --| 
     --| > Exec Post-Process (consume and drop #temp table) 

我目前遇到的問題是,我需要抓住從原始值數據庫和值傳遞到主存儲過程中,以便我可以在被調用的最後一步(存儲過程)中對更新執行後處理。

我無法更改存儲過程簽名或主存儲過程。

當我嘗試執行這種情況時,我在後處理存儲過程中得到一個無效的對象。

如何將我的值從第一個存儲過程傳遞到最後一個存儲過程。

回答

6

您需要在調用層次結構中創建比所有使用它的存儲過程更高的臨時表。既然你說你不能改變Main,唯一的機會就是創建一個新的最外層過程,創建#temp然後調用Main

然後,您可以修改預過程以填充已存在的表。你不需要在任何地方顯式地刪除表格。


或者,你可以創建一個永久性的表,包括SPID列指示哪些連接數據是從插入。您還要確保對該表的任何選擇/刪除都使用@@SPID值。我貼這個的回答爲Session-global temporary tables

+0

我使用##全局臨時表和@@ SPID解決了我的限制,從全局臨時表中獲取我的值。 – 2011-05-16 15:18:43

2

如果main過程總是在一個線程中運行,絕不會並行地從多個連接調用,你可以聲明你的臨時表作爲全局臨時表(##temp相對於#temp),假設你能夠改變內部程序。

如果同時從幾個連接調用main,這將不起作用。

+0

main是從應用程序的UI調用的,可以並行調用。 – 2011-05-16 14:34:11

+0

@Alexandre - 在這種情況下,此解決方案對您無用。抱歉。 – 2011-05-16 15:00:01

相關問題