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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |