Sta*_*ght 5 sql-server temp-tables sql-drop
我有一个创建临时表的客户端应用程序,在临时表中执行批量插入,然后在删除之前使用该表执行一些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
Run Code Online (Sandbox Code Playgroud)
这在DROP语句上出错时失败:
无法删除表'#Temp',因为它不存在或您没有权限.
我无法想象如果没有其他事情首先发生这种失败是如何发生的,但在此之前我没有看到任何其他失败.
我有什么遗失可能会导致这种情况发生吗?
可能会在会议期间发生什么事情?
在删除之前尝试检查表的存在性:
IF object_id('tempdb..#Temp') is not null
BEGIN
DROP TABLE #Temp
END
Run Code Online (Sandbox Code Playgroud)
我在SQL Server 2005上测试了这个,你可以在创建它的事务中删除一个临时表:
begin transaction
create table #temp (id int)
drop table #temp
commit transaction
Run Code Online (Sandbox Code Playgroud)
您使用的是哪个版本的SQL Server?
您可能会重新考虑为什么要删除临时表.连接结束时,将自动删除本地临时表.通常没有必要明确地删除它.
全局临时表以双重哈希(fe ##MyTable.)开头.但是,当没有连接引用它时,甚至会自动删除全局临时表.
| 归档时间: |
|
| 查看次数: |
35440 次 |
| 最近记录: |