如何获取临时表的结构然后删除临时表。临时表是否有sp_helptext?最后是否可以在同一会话或查询窗口中删除临时表?
例如:
select *
into #myTempTable -- creates a new temp table
from tMyTable -- some table in your database
tempdb..sp_help #myTempTable
答案 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
语句中。我用它在我的脚本中加载这个创建的临时表。
答案 3 :(得分:4)
获取临时表的结构
我们中的许多人将使用键盘快捷键-“ 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;
注意-
在表格结构中,表格名称显示类似于“ #TempTable ________________________________________________________________________________________________________________________ 0000000004CB”。实际上,每个临时表名称的总长度为128。为了在多个会话中以不同的方式处理同一个临时表名称,SQL Server将在之间和字母数字末尾自动添加一些下划线。
方法2 –使用SP_COLUMNS
EXEC TempDB..SP_COLUMNS '#TempTable';
方法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
要清除当前实例的临时表
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
)
那可以解决我的问题,但是我被迫抽空