SQL Server全局临时表在删除后仍然存在
本文关键字:存在 删除 Server 全局 临时表 SQL | 更新日期: 2023-09-27 17:59:00
我目前正在尝试在SQL Server中运行一些查询。在查询中有这样一个部分:
...
IF EXISTS(SELECT * FROM tempdb.dbo.sysobjects
WHERE id = object_id(N'tempdb.dbo.[##Emp]'))
DROP TABLE ##Emp
SELECT *
INTO ##Emp
FROM #Emp (nolock)
...
问题是我一直收到一些错误,说##Emp
已经存在。我已经用IF EXIST DROP
检查过了,这怎么可能呢?我甚至尝试删除IF EXIST
部分并手动删除该表,但它仍然表示该表已经存在。
使用简单的检查两个临时表状态
select * from tempdb..sysobjects where name like '%Emp%'
然后被shure处理两者的删除和重新创建:
BEGIN TRANSACTION
...
IF EXISTS(SELECT * FROM tempdb..sysobjects WHERE id = object_id(N'tempdb..[#Emp]'))
DROP TABLE #Emp
CREATE TABLE #Emp(exampleId uniqueidentifier);
...
IF EXISTS(SELECT * FROM tempdb.dbo.sysobjects WHERE id = object_id(N'tempdb.dbo.[##Emp]'))
DROP TABLE ##Emp
SELECT *
INTO ##Emp
FROM #Emp
...
COMMIT TRANSACTION
正如@damien所指出的,全局可见的临时表可能会很麻烦,如果你真的需要,请仔细检查。
在这种情况下,有这样相似的名字也很令人困惑。。。