从Execute命令插入到临时表

8
我需要使用execute命令将选择语句的数据插入到临时表中。
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

1
临时表不在与执行动态SQL相同的范围内。https://dev59.com/4EfRa4cB1Zd3GeqP5gR7 / https://dev59.com/4EfRa4cB1Zd3GeqP5gR7 - Alex K.
1
@AlexK:这些问题涉及到内部作用域中的临时表,而原帖作者希望在外部作用域中读取。而这个问题则是相反的情况,没有问题。 - Andomar
3个回答

11

你只需要在@query2变量周围加上括号。 EXEC命令用于执行存储过程,而EXEC()函数用于执行将动态SQL作为参数传递的语句。

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

阅读材料


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要求表的列定义和查询完全匹配。

0
INSERT #x
exec @query2 -- THIS DOES NOT WORKS, WHY?
SELECT *from #x

你尝试使用正确的语法了吗:

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

Nenad Zivkovic标记为正确,因为有关exec函数的更多信息已记录。 - Daniel Billingham

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接