首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在sysobjects / INFORMATION_SCHEMA中查找#temp表

在sysobjects / INFORMATION_SCHEMA中查找#temp表
EN

Stack Overflow用户
提问于 2014-02-06 00:45:54
回答 3查看 23.9K关注 0票数 11

我正在运行这样一条SELECT INTO语句,这样我就可以在最终删除表之前操作数据。

代码语言:javascript
复制
SELECT colA, colB, colC INTO #preop FROM tblRANDOM

但是,当我运行该语句,然后,在没有删除新创建的表的情况下,我运行了以下任一语句,却没有找到该表?即使浏览对象资源管理器,我也看不到它。我应该往哪里看呢?

代码语言:javascript
复制
SELECT [name] FROM sysobjects WHERE [name] = N'#preop'
SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = '#preop'
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-02-06 00:50:28

临时表不存储在本地数据库中,它们存储在tempdb中。此外,它们的名称也不是您命名的名称;它有一个十六进制代码后缀和一堆下划线,以消除会话之间的歧义。您应该使用sys.objectssys.tables,而不是deprecated sysobjects (note the big warning at the top)the incomplete and stale INFORMATION_SCHEMA views

代码语言:javascript
复制
SELECT name FROM tempdb.sys.objects WHERE name LIKE N'#preop[_]%';

如果您正在尝试确定会话中是否存在此类对象,以便您知道是否应首先删除它,则应执行以下操作:

代码语言:javascript
复制
IF OBJECT_ID('tempdb.dbo.#preop') IS NOT NULL
BEGIN
  DROP TABLE #preop;
END

在现代版本(SQL Server 2016+)中,这甚至更容易:

代码语言:javascript
复制
DROP TABLE IF EXISTS #preop;

但是,如果这段代码在存储过程中,那么就没有必要这么做了……当存储过程超出作用域时,应该自动删除该表。

票数 24
EN

Stack Overflow用户

发布于 2019-06-11 23:49:49

下面是我如何获得临时表的列的:

代码语言:javascript
复制
CREATE TABLE #T (PK INT IDENTITY(1,1), APP_KEY INT PRIMARY KEY)

SELECT * FROM tempdb.INFORMATION_SCHEMA.COLUMNS c WHERE c.TABLE_NAME LIKE '#T%'
票数 3
EN

Stack Overflow用户

发布于 2016-05-25 19:53:53

我更喜欢用这样的方式查询tempdb

代码语言:javascript
复制
IF  EXISTS (SELECT * FROM tempdb.sys.objects 
             WHERE object_id = OBJECT_ID(N'tempdb.[dbo].[#MyProcedure]')
             AND type in (N'P', N'PC'))
BEGIN 
    print 'dropping [dbo].[#MyProcedure]'
    DROP PROCEDURE [dbo].[#MyProcedure]
END
GO
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21583268

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档