TSQL从动态sql中选择Temp表

前端之家收集整理的这篇文章主要介绍了TSQL从动态sql中选择Temp表前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
这似乎比较简单,但显然不是.

我需要通过select into语法创建一个基于现有表的临时表:

SELECT * INTO #TEMPTABLE FROM EXISTING_TABLE

问题是现有的表名通过参数被接受…

我可以通过以下方式获取表的数据:

execute ('SELECT * FROM ' + @tableName)

但是我如何结婚这两个,所以我可以把执行结果直接进入临时表.

将要使用的每个表的列不一样,因此在获取数据之前构建临时表是不实际的.

除了使用全局临时表,我可以接受任何建议.

更新:

这是完全可笑的,但我对全球临时表的保留是,这是一个多用户平台,如果表会长时间逗留,就会出现问题…

Sooo ..只是为了超越这部分,我已经通过使用execute来生成全局临时表.

execute('select * into ##globalDynamicFormTable from ' + @tsFormTable)

然后我使用全局临时表加载本地临时表:

select * into #tempTable from ##globalDynamicFormTable

然后我放弃全局表.

drop table ##globalDynamicFormTable

这是肮脏的,我不喜欢它,但暂时的,直到我得到一个更好的解决方案,它将不得不工作.

到底:

我想没有办法解决.

最好的答案似乎是

在execute命令中创建一个视图,并使用它来加载存储过程中的本地临时表.

在execute命令中创建一个全局临时表,并使用它来加载本地临时表.

就这样说,我可能会坚持使用全局临时表,因为创建和放弃视图在我的组织中被审计,我相信他们会质疑,如果它始终发生.

谢谢!

解决方法

一个工作的例子.
DECLARE @TableName AS VARCHAR(100)
SELECT @TableName = 'YourTableName'

EXECUTE ('SELECT * INTO #TEMP  FROM ' + @TableName +'; SELECT * FROM #TEMP;')

第二个解决方案与可访问的临时表

DECLARE @TableName AS VARCHAR(100)
SELECT @TableName = 'YOUR_TABLE_NAME'

EXECUTE ('CREATE VIEW vTemp AS
        SELECT *
        FROM ' + @TableName)
SELECT * INTO #TEMP  FROM vTemp 

--DROP THE VIEW HERE      
DROP VIEW vTemp

/*START USING TEMP TABLE
************************/
--EX:
SELECT * FROM #TEMP


--DROP YOUR TEMP TABLE HERE
DROP TABLE #TEMP

猜你在找的MsSQL相关文章