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

时间:2012-01-23 18:07:17

标签: sql-server tsql sql-server-2000

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

例如:

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

tempdb..sp_help #myTempTable

Reference

7 个答案:

答案 0 :(得分:102)

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

答案 1 :(得分:9)

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

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

答案 2 :(得分:8)

我需要能够在脚本中重新创建临时表,所以我使用此代码生成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) + ')', '') 
      ELSE '' END
   + CASE WHEN c.IS_NULLABLE = 'YES' THEN ' NULL' ELSE '' END
   + ','
From tempdb.INFORMATION_SCHEMA.COLUMNS c 
WHERE TABLE_NAME LIKE '#myTempTable%' 

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

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

答案 3 :(得分:4)

获取临时表的结构

enter image description here

我们中的许多人将使用键盘快捷键-“ Alt + F1”之类的常用方法,或者将使用“ SP_HELPTEXT”命令(还有许多其他方法)来查看物理表的结构。众所周知,查看临时表的结构并不像查看物理表的结构那样普遍。我们将看到如何在SQL Server中轻松查看临时表的结构。下面提到的方法适用于Azure SQL DB和本地。

演示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 ________________________________________________________________________________________________________________________ 0000000004CB”。实际上,每个临时表名称的总长度为128。为了在多个会话中以不同的方式处理同一个临时表名称,SQL Server将在之间和字母数字末尾自动添加一些下划线。

方法2 –使用SP_COLUMNS

EXEC TempDB..SP_COLUMNS '#TempTable';

enter image description here

方法3 –使用系统表,例如INFORMATION_SCHEMA.COLUMNS,SYS.COLUMNS,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;

答案 4 :(得分:3)

exec sp_columns table_name;

例如

exec sp_columns员工;

答案 5 :(得分:2)

while (std::getline(in >> state >> std::ws, county, '\t') >> population) {
    // ...
}

答案 6 :(得分:0)

所以,这对我有所帮助。它创建了表列。

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
)

那可以解决我的问题,但是我被迫抽空