从Execute命令插入临时表

时间:2013-07-17 16:49:26

标签: sql sql-server insert execute temporary

我需要使用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

3 个答案:

答案 0 :(得分:8)

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

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

Reading material

答案 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