【问题标题】:Database name 'tempdb' ignored, referencing object in tempdb数据库名称“tempdb”被忽略,在 tempdb 中引用对象
【发布时间】:2018-06-21 17:19:45
【问题描述】:

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

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

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

DROP TABLE IF EXISTS tempdb..#table;

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

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

有人知道这条消息的原因和含义吗?

【问题讨论】:

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


    【解决方案1】:

    在谈论#table 时无需指定tempdb - 在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;
    

    这就是它要你做的。

    【讨论】:

    • 非常好,我们不需要再像OBJECT_ID函数那样指向tempdb了。
    • DROP TABLE IF EXISTS #table; 它会引发错误。 关键字“IF”附近的语法不正确。
    • @gotqn 确实;只有OBJECT_ID 需要它,我们这里没有使用OBJECT_ID
    • @DineshDB 在什么服务器版本上?我真的只是运行它(在 2016 年) - 它工作正常
    • @DineshDB drop if exists 可以与SQL Server 2016 - google.bg/…一起使用
    猜你喜欢
    • 1970-01-01
    • 2011-09-27
    • 2017-11-20
    • 1970-01-01
    • 1970-01-01
    • 2021-08-23
    • 2016-05-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多