我有一个客户端应用程序,它创建一个临时表,在临时表中执行批量插入,然后在删除它之前使用该表执行一些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