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部分并手动删除该表,但它仍然表示该表已经存在。

SQL Server全局临时表在删除后仍然存在

使用简单的检查两个临时表状态

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所指出的,全局可见的临时表可能会很麻烦,如果你真的需要,请仔细检查。
在这种情况下,有这样相似的名字也很令人困惑。。。