代码之家  ›  专栏  ›  技术社区  ›  ninesided

测试多tempdb环境中是否存在临时表?

  •  0
  • ninesided  · 技术社区  · 17 年前

    是否有任何方法可以确定某个特定的临时表是否已在会话中创建,而不引用在其上创建的tempdb数据库?用户在登录时被分配到特定的tempdb,所以我不知道他们将使用哪个tempdb。

    我不需要指定一个tempdb来从temp表中选择数据,所以我肯定可以看到该表是否存在?

    2 回复  |  直到 17 年前
        1
  •  0
  •   Marc Gravell    17 年前

    在我看来,你不应该在这里使用临时桌…这些看起来更像常规表(可能带有用户标识符)。这里的情况是什么?

    请注意,以这种方式使用临时表可能会对优化程序/查询缓存造成严重破坏-它必须执行大量重新编译,因为每次调用foo的含义都会发生很大的变化。

        2
  •  5
  •   Jonathan    17 年前

    您可以使用对象ID检查是否存在临时对象:

    SELECT object_id('#tmpTable')
    

    如果需要,可以指定要使用的tempdb,但不必:

    SELECT object_id('tempdb..#tmpTable')
    

    值得注意的是,这也适用于全球临时表:

    SELECT object_id('##tmpTable')
    

    为了使脚本不必在结尾处执行删除表就可以重新运行,我总是在创建临时表之前执行检查和删除。我经常在开发SQL代码时保留创建的表。

    IF NULLIF(object_id('#tmpTable'), 0) IS NOT NULL DROP TABLE #tmpTable
    CREATE TABLE #tmpTable (
        id int,
        col1 varchar(100)
    )