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
_@query2
_変数を括弧で囲む必要があります。 EXEC
コマンドはストアドプロシージャを実行するためのものであり、EXEC()
関数はパラメータとして使用される動的SQLを実行するためのものです。
_INSERT #x
exec (@query2)
SELECT *from #x
_
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')
これでうまくいかない場合は、正確なエラーを投稿してください。考えられる原因の1つは、insert ... exec
が、テーブルの列定義とクエリが完全に一致することを要求していることです。
INSERT #x
exec @query2 -- THIS DOES NOT WORKS, WHY?
SELECT *from #x
正しいシンタックスを使用してみましたか?
INSERT #x
exec (@query2)
SELECT *from #x