看起来相对简单,但显然并不是。
我需要通过select into语法基于现有表创建一个临时表:
SELECT * INTO #TEMPTABLE FROM EXISTING_TABLE
问题是,现有的表名是通过参数传递的...
我可以通过以下方式获取表格数据:
execute ('SELECT * FROM ' + @tableName)
但是我该如何把这两者结合起来,以便可以直接将execute的结果放入临时表中呢?每个表的列都不相同,因此在获取数据之前构建临时表并不实际。
我愿意听取任何建议,除了使用全局临时表。
更新:
这完全荒谬,但我对全局临时表的保留意见在于,这是一个多用户平台,如果表会持续存在很长时间,就会出现问题...
所以...为了解决这个问题,我已经开始使用execute来生成全局临时表。
execute('select * into ##globalDynamicFormTable from ' + @tsFormTable)
然后我使用全局临时表来加载本地临时表:
select * into #tempTable from ##globalDynamicFormTable
然后我删除了全局表。
drop table ##globalDynamicFormTable
这很糟糕,我不喜欢它,但在找到更好的解决方案之前,它将不得不工作。
总之:
我想没有绕过它的方法了。
最好的答案似乎是:
在执行命令中创建一个视图,并使用它来加载存储过程中的本地临时表。
在执行命令中创建一个全局临时表,并使用它来加载本地临时表。
话虽如此,我可能会坚持使用全局临时表,因为在我的组织中,创建和删除视图是需要审计的,如果这种情况经常发生,他们肯定会质疑。
谢谢!