一千萬個為什麽

搜索

臨時表的DROP TABLE失敗

我有一個客戶端應用程序,它創建一個臨時表,在臨時表中執行批量插入,然後在刪除它之前使用該表執行一些SQL。

偽代碼:

open connection
begin transaction
CREATE TABLE #Temp ([Id] int NOT NULL)
bulk insert 500 rows into #Temp
UPDATE [OtherTable] SET [Status]=0 WHERE [Id] IN (SELECT [Id] FROM #Temp) AND [Group]=1
DELETE FROM #Temp WHERE [Id] IN (SELECT [Id] FROM [OtherTable] WHERE [Group]=1)
INSERT INTO [OtherTable] ([Group], [Id]) SELECT 1 as [Group], [DocIden] FROM #Temp

DROP TABLE #Temp
COMMIT TRANSACTION
CLOSE CONNECTION

這失敗了,DROP語句出錯:

無法刪除表'#Temp',因為它不存在或您沒有權限。

我無法想象如果沒有其他事情先發生,這種失敗是如何發生的,但我沒有看到在此之前發生任何其他失敗。

我有什麽遺失可能會導致這種情況發生嗎?

最佳答案

我在SQL Server 2005上測試了這個,你可以在創建它的事務中刪除一個臨時表:

begin transaction
create table #temp (id int)
drop table #temp
commit transaction

您使用的是哪個版本的SQL Server?

您可能會重新考慮為什麽要放棄臨時表。連接結束時,將自動刪除本地臨時表。通常沒有必要明確地刪除它。

全局臨時表以雙重哈希(f.e。 ## MyTable 。)開頭。但是,如果沒有連接引用全局臨時表,則會自動刪除它。

轉載註明原文: 臨時表的DROP TABLE失敗