我有一個客戶端應用程序,它創建一個臨時表,在臨時表中執行批量插入,然後在刪除它之前使用該表執行一些SQL。DROP TABLE失敗的臨時表
僞代碼:
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」,因爲它不存在,或者您沒有權限。
我無法想象如何在沒有其他事情的情況下首先發生這種故障,但在此之前我沒有看到任何其他故障發生。
有什麼我可能會導致這種情況發生?
一項建議,將創建,批量插入,以及拖放事務塊之外聲明。沒有理由或需要鎖定它,因爲沒有其他連接可以訪問它。 – 2010-04-15 02:58:26
@Philip凱利:這不是一個壞主意,我會看看我能做到這一點,以限制交易的長度,但我不能看到如何將導致此問題 – StarBright 2010-04-15 03:41:05
的錯誤出現在空白要表現。 ;)一個完整的repro腳本可以更清楚地說明這一點。 – Aaronaught 2010-04-15 03:44:04