7

我需要使用执行命令将 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
4

3 回答 3

10

@query2您只需要在变量周围加上括号。EXECcommand 用于执行存储过程,而EXEC()function 用于执行作为参数的动态 sql。

INSERT #x
exec (@query2)
SELECT *from #x

阅读材料

于 2013-07-17T17:30:54.363 回答
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要求表的列定义和查询完全匹配。

于 2013-07-17T17:07:20.627 回答
0
INSERT #x
exec @query2 -- THIS DOES NOT WORKS, WHY?
SELECT *from #x

您是否尝试过使用正确的合成器:

INSERT #x
exec (@query2) 
SELECT *from #x
于 2013-07-17T17:33:17.913 回答