这似乎比较简单,但显然不是.
我需要通过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