获取临时表的结构(如生成sql脚本)并清除当前实例的临时表

Ret*_*der 56 t-sql sql-server sql-server-2000

如何获取临时表的结构然后删除临时表.临时表是否有sp_helptext?最后是否可以在同一会话或查询窗口中删除临时表?

例:

select *
into #myTempTable  -- creates a new temp table
from tMyTable  -- some table in your database

tempdb..sp_help #myTempTable
Run Code Online (Sandbox Code Playgroud)

参考.

Mik*_*son 105

您需要在临时表名称周围使用引号,并且可以在使用后直接删除临时表drop table ....

select *
into #myTempTable  -- creates a new temp table
from tMyTable  -- some table in your database

exec tempdb..sp_help '#myTempTable'

drop table #myTempTable
Run Code Online (Sandbox Code Playgroud)

  • 我可以补充一点,这个解决方案对系统资源有点过分.如果只需要表结构,则在select的末尾添加"WHERE 0 = 1". (6认同)

Ger*_*hef 10

只要我知道表没有SP_HelpText.试试这个:

Select * From tempdb.sys.columns Where object_id=OBJECT_ID('tempdb.dbo.#myTempTable');
Run Code Online (Sandbox Code Playgroud)


daj*_*ajo 10

我需要能够在脚本中重新创建临时表,因此我使用此代码生成CREATE TABLE语句的列部分:

SELECT char(9) + '[' + c.column_name + '] ' + c.data_type 
   + CASE 
        WHEN c.data_type IN ('decimal')
            THEN isnull('(' + convert(varchar, c.numeric_precision) + ', ' + convert(varchar, c.numeric_scale) + ')', '') 
        WHEN c.data_type IN ('varchar', 'nvarchar', 'char', 'nchar')
            THEN isnull('(' 
                + CASE WHEN c.character_maximum_length = -1
                    THEN 'max'
                    ELSE convert(varchar, c.character_maximum_length) 
                  END + ')', '')
        ELSE '' END
   + CASE WHEN c.IS_NULLABLE = 'YES' THEN ' NULL' ELSE '' END
   + ','
FROM tempdb.INFORMATION_SCHEMA.COLUMNS c 
WHERE TABLE_NAME LIKE '#myTempTable%' 
ORDER BY c.ordinal_position
Run Code Online (Sandbox Code Playgroud)

我没有测试所有sql数据类型,但这适用于int,float,datetime,money和bit.

此外 - ApexSQL Complete(免费)有一个很好的功能,您可以将网格结果导出到一个Insert Into语句中.我用它在我的脚本中加载这个创建的临时表. ApexSQL复制结果作为插入语句

  • 很好的解决方案,如果您添加最大大小,您将使它成为一个很棒的脚本! (2认同)
  • 还想按 ordinal_position 进行 ORDER BY,以便列定义按照与原始顺序相同的顺序出现。 (2认同)
  • @Eli,好建议。我编辑了字符类型最大尺寸的脚本 (2认同)
  • @PaulEvans,对。我编辑了脚本以正确排序列 (2认同)
  • @RetroCoder我可以建议将此标记为已接受的答案,因为它直接提供了请求的输出。 (2认同)

Aru*_*zhi 8

获取临时表的结构

\n\n

在此输入图像描述

\n\n

我们中的许多人都会使用常见的方法,例如键盘快捷键 \xe2\x80\x93 \xe2\x80\x98Alt+F1\xe2\x80\x98 或使用 \xe2\x80\x98SP_HELPTEXT\xe2\x80\x98 命令(还有很多其他命令)方法也有)来查看物理表的结构。众所周知,查看临时表的结构并不像查看物理表的结构那么常见。我们将看到,如何在 SQL Server 中轻松查看临时表的结构。下面提到的方法适用于 Azure SQL DB 和本地。

\n\n

演示 SQL 脚本

\n\n
IF OBJECT_ID(\'TempDB..#TempTable\') IS NOT NULL\n    DROP TABLE #TempTable;\n\nSELECT 1 AS ID,\'Arul\' AS Names\nINTO\n#TempTable;\n\nSELECT * FROM #TempTable;\n
Run Code Online (Sandbox Code Playgroud)\n\n

方法 1 \xe2\x80\x93 使用 SP_HELP

\n\n
EXEC TempDB..SP_HELP #TempTable;\n
Run Code Online (Sandbox Code Playgroud)\n\n

在此输入图像描述

\n\n

笔记-

\n\n

在表结构中,表名称显示类似 \xe2\x80\x98#TempTable_______________________________________________________________________________________________________________________0000000004CB\xe2\x80\x99。实际上,每个临时表名称的总长度将为 128 。为了以不同方式处理多个会话中的相同临时表名称,SQL Server 将自动在中间添加一些下划线,并在末尾添加字母数字\xe2\x80\x99s。

\n\n

方法 2 \xe2\x80\x93 使用 SP_COLUMNS

\n\n
EXEC TempDB..SP_COLUMNS \'#TempTable\';\n
Run Code Online (Sandbox Code Playgroud)\n\n

在此输入图像描述

\n\n

方法 3 \xe2\x80\x93 使用系统表,例如 INFORMATION_SCHEMA.COLUMNS、SYS.COLUMNS、SYS.TABLES

\n\n
SELECT * FROM TempDB.INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME IN (\nSELECT NAME FROM TempDB.SYS.TABLES WHERE OBJECT_ID=OBJECT_ID(\'TempDB.dbo.#TempTable\')\n);\nGO\n\nSELECT * FROM TempDB.SYS.COLUMNS WHERE OBJECT_ID=OBJECT_ID(\'TempDB.dbo.#TempTable\');\nGO\n\nSELECT * FROM TempDB.SYS.TABLES WHERE OBJECT_ID=OBJECT_ID(\'TempDB.dbo.#TempTable\');\nGO\n
Run Code Online (Sandbox Code Playgroud)\n\n

在此输入图像描述

\n\n

清除当前实例的临时表

\n\n
IF OBJECT_ID(\'TempDB..#TempTable\') IS NOT NULL\n    DROP TABLE #TempTable;\n
Run Code Online (Sandbox Code Playgroud)\n


小智 5

Select * From tempdb.INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME LIKE '#yourtemp%'
Run Code Online (Sandbox Code Playgroud)