2011-07-08 54 views
3

我創建了一個包含7個臨時表的存儲過程,每個臨時表在其工作結束時被刪除。爲什麼臨時表不能從SQL Server中的tempdb中刪除?

我從一個Web服務和我們用於不同實例的相同Web服務調用SP。

我強制刪除了每個臨時表,但是當SP執行時,它不會刪除位於「tempdb/Temporary Table」中的任何臨時表。而且,當我打開我的應用程序的新實例並嘗試執行相同的SP時,它將修改相同的臨時表。

這給我造成了問題。它會在SP同時執行時鎖定表,它會鎖定表,並且我的sp不能產生結果並拋出異常。

所以我想在我的操作結束時刪除臨時表。請幫忙。

+4

顯示一些代碼請 –

+5

你是直接在TempDB中創建表還是使用'create table #TableName ...'或者'create table ## TableName ...'? –

+0

也許在try catch塊中的東西阻止了drop語句的執行?需要代碼。 – JeffO

回答

6

我不能告訴你爲什麼會發生這種情況,但我之前也處理過它。 嘗試在SP的開頭或結尾清理表或使用表變量。

IF object_id('tempdb..#TableName') IS NOT NULL DROP TABLE #TableName 
3

這可以,如果你已經使用了許多臨時表和你有一些錯誤在你的SP和您的下降語句之間不能執行的情況下發生。
所以它總是最好的做法是在SP開始使用

IF object_id('tempdb..#TableName') IS NOT NULL DROP TABLE #TableName 

0
IF object_id('tempdb..#TableName') IS NOT NULL DROP TABLE #TableName 

我認爲這不會工作,因爲我們知道sql server存儲臨時表名稱並添加一些額外的字符。 如果存在 DROP TABLE #TableName

0

要強制臨時表的滴使用

BEGIN TRY DROP #MyTable END TRY BEGIN CATCH END CATCH 

醜但有效的(來自tempdb.sys.tables其中類似的 '#表名%' 名稱選擇1)。爲每個臨時表使用單獨的TRY。