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中引用对象。
有谁知道这个消息的意思和含义?
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)
这就是它想要您做的。