我需要使用execute命令将select语句中的数据插入临时表。
if OBJECT_ID('tempdb..#x') is not null
drop table #x
Create Table #x(aaa nvarchar(max))
declare @query2 nvarchar(max)
set @query2 = 'SELECT [aaa] from IMP_TEMP'
INSERT #x
SELECT [aaa] from IMP_TEMP -- THIS WORKS
SELECT *from #x
INSERT #x
exec @query2 -- THIS DOES NOT WORKS, WHY?
SELECT *from #x
答案 0 :(得分:8)
您只需要@query2
变量周围的括号。 EXEC
命令用于执行存储过程,而EXEC()
函数用于执行动态sql作为参数。
INSERT #x
exec (@query2)
SELECT *from #x
答案 1 :(得分:0)
与Alex K注释不同,本地临时表在连接中的所有内部范围内都是可见的。以下代码段正常运行:
create table #tbl (id int)
exec ('select * from #tbl')
您还可以将insert ... exec
用于临时表:
create table #tbl (id int)
insert #tbl values (3), (1), (4)
insert #tbl exec ('select id from #tbl')
如果这对您不起作用,请发布确切的错误。一个可能的罪魁祸首是insert ... exec
要求表的列定义和查询完全匹配。
答案 2 :(得分:0)
INSERT #x
exec @query2 -- THIS DOES NOT WORKS, WHY?
SELECT *from #x
您是否尝试过使用正确的synthax:
INSERT #x
exec (@query2)
SELECT *from #x