【发布时间】:2012-03-21 01:20:57
【问题描述】:
这看起来比较简单,但显然不是。
我需要通过 select into 语法基于现有表创建一个临时表:
SELECT * INTO #TEMPTABLE FROM EXISTING_TABLE
问题是,现有的表名是通过参数接受的...
我可以通过以下方式获取表格的数据:
execute ('SELECT * FROM ' + @tableName)
但是我如何将两者结合起来,以便我可以将执行结果直接放入临时表中。
这将用于的每个表的列都不相同,因此在获取数据之前构建临时表是不切实际的。
我愿意接受任何建议,除了使用全局临时表。
更新:
这完全荒谬,但我对全局临时表的保留意见是,这是一个多用户平台,如果该表会长时间逗留,就会出现问题......
Sooo.. 只是为了完成这一部分,我已经开始使用执行来生成全局临时表。
execute('select * into ##globalDynamicFormTable from ' + @tsFormTable)
然后我使用全局临时表来加载本地临时表:
select * into #tempTable from ##globalDynamicFormTable
然后我删除全局表。
drop table ##globalDynamicFormTable
这很脏,我不喜欢它,但目前,在我找到更好的解决方案之前,它必须起作用。
最后:
我想没有办法绕过它。
最好的答案似乎是;
在执行命令中创建一个视图,并使用它来加载存储过程中的本地临时表。
在执行命令中创建一个全局临时表,并使用它来加载本地临时表。
话虽如此,我可能会坚持使用全局临时表,因为在我的组织中对创建和删除视图进行了审核,我相信他们会质疑它是否一直都在发生。
谢谢!
【问题讨论】:
-
您使用的是什么版本的 SQL Server?
标签: sql sql-server tsql temp-tables