数据库名称'tempdb'被忽略,引用tempdb中的对象

时间:2018-01-12 09:17:50

标签: sql sql-server tsql sql-server-2016

而不是像这样检查临时表的存在:

IF OBJECT_ID('tempdb..#table') IS NOT NULL
BEGIN;
    DROP TABLE #table;
END;

我正在使用新的DROP IF EXISTS技术:

DROP TABLE IF EXISTS tempdb..#table;

它工作正常,但如果表不存在,我收到以下消息。

  

忽略数据库名称'tempdb',引用tempdb中的对象。

有谁知道这条消息的原因和含义是什么?

1 个答案:

答案 0 :(得分:4)

在谈论tempdb时,无需指定#table - tempdb中的临时表已经。我同意该消息令人困惑,但它实际上并不是错误 - 它只是一条消息(PRINT)告诉您您做错了什么。实际上,无论是否存在,您都会收到的消息;例如:

-- drop when doesn't exist
drop table if exists tempdb..#foo

go

-- drop when does exist
create table #foo (id int)
drop table if exists tempdb..#foo

输出消息两次

Database name 'tempdb' ignored, referencing object in tempdb.
Database name 'tempdb' ignored, referencing object in tempdb.

所以:只需使用:

DROP TABLE IF EXISTS #table;

这是它要你做的。