【问题标题】:using Object_id() function with #tables将 Object_id() 函数与 #tables 一起使用
【发布时间】:2011-12-06 22:58:13
【问题描述】:

我想确定我的数据库中是否存在临时表。

我尝试使用OBJECT_ID() 函数,但似乎无法将它与临时表一起使用。

我该如何解决这个问题?

【问题讨论】:

  • IF OBJECT_ID('tempdb..#table') IS NOT NULL DROP TABLE #table CREATE TABLE #Table?
  • 不是哈希表,是临时表。
  • @Nix - @table = 表变量。 #table = 临时表。 ##table = 全局临时表。
  • 谢谢大家!所有的答案都写好了,现在我会接受一个女巫吗?!

标签: sql sql-server


【解决方案1】:

使用

OBJECT_ID('tempdb..#foo')

在另一个数据库的上下文中运行时获取临时表的 id。

【讨论】:

  • 我试过这个:select OBJECT_ID('tempdb.myDb.##myTempTable') 但是,它不起作用
  • 去掉myDb 位。这不在我的回答中!使用OBJECT_ID('tempdb..##myTempTable') 或OBJECT_ID('tempdb.dbo.##myTempTable')
  • 我知道这是一个旧线程,但我只是想指出一个事实,即答案在 tempdb 和 #table 之间有两 (2) 个句点...我试了几次才知道那个。
  • 是的 - 如果您在非默认架构中创建临时表,您会将架构名称放在这两个点之间
【解决方案2】:

当调用 OBJECT_ID 时,对于临时表/哈希表 TEMPDB 必须指定它,除非它已经是工作数据库。

我在 SQL2008 中签入并在下面验证。

USE SampleDB
create table #tt1 (dummy int)
select OBJECT_ID('SampleDB..#tt1')  -- returns NULL
select OBJECT_ID('tempdb..#tt1')   -- returns ID

【讨论】:

    【解决方案3】:

    来自SQL Server Codebook

    How do you check if a temp table exists?
    You can use IF OBJECT_ID('tempdb..#temp') IS NOT NULL
    

    SQL 脚本

    --Check if it exists
    IF OBJECT_ID('tempdb..#temp') IS NOT NULL
    BEGIN
    PRINT '#temp exists!'
    END
    ELSE
    BEGIN
    PRINT '#temp does not exist!'
    END
    

    【讨论】:

    【解决方案4】:

    使用它来更改对 tempdb 的 OBJECT_ID 调用的上下文

    OBJECT_ID('tempdb..#table')
    

    OBJECT_ID on MSDN 显示 3 部分对象名称。在这种情况下,您可以省略 schema_name

    OBJECT_ID ( '[ database_name . [ schema_name ] . | schema_name . ]

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-07-11
      • 2021-10-25
      • 2014-08-05
      • 2017-06-25
      • 2015-06-29
      • 2020-09-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多