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

如何得到临时表的结构,然后删除临时表。临时表是否有 sp _ help 文本?最后,是否可以在同一会话或查询窗口中删除临时表?

例如:

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


tempdb..sp_help #myTempTable

参考

103719 次浏览

只要我知道表没有 SP _ HelpText 就行。 试试这个:

Select * From tempdb.sys.columns Where object_id=OBJECT_ID('tempdb.dbo.#myTempTable');

您需要在临时表名称周围使用引号,并且在使用 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

Exec sp _ column table _ name;

例子

Exec sp _ column 员工;

Select * From tempdb.INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME LIKE '#yourtemp%'

我需要能够在脚本中重新创建一个临时表,所以我使用这段代码生成 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

我没有测试所有的 sql 数据类型,但是这个测试适用于 int、 float、 datetime、 money 和 bit。

另外-ApexSQL 完成(免费)有一个很好的功能,您可以导出网格结果到一个 Insert Into语句。我使用它在脚本中加载这个创建的临时表。 ApexSQL Copy Results As Insert into statement

这对我很有帮助,它创建了 Table 列。

Select Column_Name + ' [' + DATA_TYPE + ']' +
case when Data_Type in ('numeric', 'varchar', 'char')
then '(' +
case
when DATA_TYPE = 'numeric' then CAST(numeric_precision as varchar(3)) + ',' + CAST(numeric_scale as varchar(3))
when DATA_TYPE = 'varchar' then CAST(CHARACTER_MAXIMUM_LENGTH as varchar(3))
when DATA_TYPE = 'char' then CAST(CHARACTER_MAXIMUM_LENGTH as varchar(3))
end
+ ')'
else ''
end
+ ','
, *
From tempdb.INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME LIKE '#MEHTEMPTABLE%'

然后,我所需要做的就是将这些项目复制到一个表声明中

Declare @MyTable Table
(
--All columns here
)

那样我的问题就解决了,但我时间紧迫

获取临时表的结构

enter image description here

我们中的许多人会使用像快捷键-‘ Alt + F1’或者使用‘ SP _ HELPTEXT’命令(还有很多其他的方法)来查看物理表的结构。众所周知,查看临时表的结构并不像查看物理表的结构那样常见。我们将看到,如何在 SQLServer 中轻松查看临时表的结构。下面提到的方法适用于 Azure SQL DB 和 On-Premises。

演示 SQL 脚本

IF OBJECT_ID('TempDB..#TempTable') IS NOT NULL
DROP TABLE #TempTable;


SELECT 1 AS ID,'Arul' AS Names
INTO
#TempTable;


SELECT * FROM #TempTable;

方法1-使用 SP _ HELP

EXEC TempDB..SP_HELP #TempTable;

enter image description here

注 -

在表结构中,表名显示类似“ # TempTable _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _。实际上,每个临时表名称的总长度将是128。若要以不同方式处理多个会话中的同一临时表名称,SQLServer 将自动在两个会话之间和结尾处添加一些下划线。

方法2-使用 SP _ COLUMNS

EXEC TempDB..SP_COLUMNS '#TempTable';

enter image description here

方法3-使用诸如 INFORMATION _ SCHEMA. Colummns,SYS.Colummns,SYS.Tables 之类的系统表

SELECT * FROM TempDB.INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME IN (
SELECT NAME FROM TempDB.SYS.TABLES WHERE OBJECT_ID=OBJECT_ID('TempDB.dbo.#TempTable')
);
GO


SELECT * FROM TempDB.SYS.COLUMNS WHERE OBJECT_ID=OBJECT_ID('TempDB.dbo.#TempTable');
GO


SELECT * FROM TempDB.SYS.TABLES WHERE OBJECT_ID=OBJECT_ID('TempDB.dbo.#TempTable');
GO

enter image description here

清除当前实例的临时表

IF OBJECT_ID('TempDB..#TempTable') IS NOT NULL
DROP TABLE #TempTable;