7

@strQuery実行時に多くの列で結果を返す動的クエリがあります。この動的クエリの結果を一時テーブルに挿入したいと考えています。一時テーブルでフィルタリングを実行し、必要な結果を取得したいので、これを行っています。

同様の質問が以前のスレッドHERE で尋ねられました。ここでは、一時テーブルが最初に作成され、次に を使用してデータが挿入されINSERT INTOます。

列のリストが長く、フィールドのデータ型がわからないため、この手順を避けたいと思います。

select * into #tmh from
exec(@strQuery)

エラーメッセージ

キーワード「exec」付近の構文が正しくありません。

これを行う方法 ?このようにすることは可能ですか?そうでない場合は、動的クエリを実行した結果をテーブルに格納するための別の代替手段を指定してください。ありがとう。

4

5 に答える 5

14

私は以前にこの状況に直面したことがあり、これが私がしたことです:

DECLARE @strQuery nVarchar(100)

SET @strQuery='SELECT * into [tempdb].[dbo].[temptable] FROM YourTable'

EXECUTE sp_executesql @strQuery

SELECT * FROM [tempdb].[dbo].[temptable]

DROP TABLE [tempdb].[dbo].[temptable]

正常に動作します。#temptableではなくFQテーブル名の理由を聞かないでください。何も思いつきません。それは動作しません。それを機能させる唯一の方法は、[tempdb]。[dbo]。[temptable]を使用することでした。

于 2012-12-21T06:24:11.520 に答える
1

はい、次のように挿入して、元のクエリを含む新しい動的クエリを作成できます。

declare @strNewQuery varchar(max)
set @strNewQuery ='select * into #tmh from ('+@strQuery+') as t'
exec(@strNewQuery)
于 2012-12-27T10:40:56.617 に答える
1

動的 SQL で OUTPUT オプションを使用して設定された、現在の実行コンテキストで変数を使用できます。以下サンプルコード。

DECLARE @Amount AS MONEY
DECLARE   @SQL AS NVARCHAR(1000)
SET @Amount = NULL 
SET @SQL = ('SELECT @amt=100' )
EXECUTE   sp_executeSQL @SQL, N'@amt MONEY OUTPUT', @amt=@Amount OUTPUT
SELECT  @Amount
于 2012-12-21T08:13:15.007 に答える
1

このように進みます

select t1.name,t1.lastname from(select * from table)t1.

ここで、「select * from table」は動的クエリです。example に示すように、一時テーブル t1 として使用できる結果が返されます。

于 2012-12-21T05:57:28.107 に答える
0

これを回避するために使用しました-動的クエリなし

これは、テーブル変数を使用してデータをプロシージャに受け取ります

ジョインもそれに適用できます

select * into #itemPhantom from @tbl_items_upload

select * from #itemPhantom

select #itemPhantom.itemreference from #itemPhantom  left join phantom on phantom.name=#itemPhantom.PhantomName
于 2016-01-02T13:11:02.560 に答える