数据库名称“ tempdb”被忽略,在tempdb中引用对象

got*_*tqn 5 sql t-sql sql-server sql-server-2016

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

IF OBJECT_ID('tempdb..#table') IS NOT NULL
BEGIN;
    DROP TABLE #table;
END;
Run Code Online (Sandbox Code Playgroud)

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

DROP TABLE IF EXISTS tempdb..#table;
Run Code Online (Sandbox Code Playgroud)

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

数据库名称“ tempdb”被忽略,在tempdb中引用对象。

有谁知道这个消息的意思和含义?

Mar*_*ell 6

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
Run Code Online (Sandbox Code Playgroud)

输出两次消息:

Database name 'tempdb' ignored, referencing object in tempdb.
Database name 'tempdb' ignored, referencing object in tempdb.
Run Code Online (Sandbox Code Playgroud)

因此:只需使用:

DROP TABLE IF EXISTS #table;
Run Code Online (Sandbox Code Playgroud)

这就是它想要您做的。