web-dev-qa-db-ja.com

実行コマンドから一時テーブルに挿入する

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
7

_@query2_変数を括弧で囲む必要があります。 EXECコマンドはストアドプロシージャを実行するためのものであり、EXEC()関数はパラメータとして使用される動的SQLを実行するためのものです。

_INSERT #x
exec (@query2)
SELECT *from #x
_

読み物

9
Nenad Zivkovic

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が、テーブルの列定義とクエリが完全に一致することを要求していることです。

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

正しいシンタックスを使用してみましたか?

INSERT #x
exec (@query2) 
SELECT *from #x
0
Petio Ivanov