ストアドプロシージャがあり、毎回異なるパラメーターを渡して、複数の異なる時間を呼び出す必要があります。結果を単一のデータセットとして収集したいと思います。このようなものは可能ですか...
exec MyStoredProcedure 1
UNION
exec MyStoredProcedure 2
UNION
exec MyStoredProcedure 3
上記の構文を使用しようとしましたが、エラーが発生しました...
Incorrect syntax near the keyword 'UNION'
私が扱っているストアドプロシージャは非常に複雑で、「ブラックボックス」のようなものです。そのため、ストアドプロシージャの定義に入って何も変更することはできません。結果を収集する方法に関する提案はありますか?
SQL Server 2008 R2を使用しています。助けてくれてありがとう。
このような一時テーブルを使用する必要があります。 UNIONはSELECT用であり、ストアドプロシージャではありません
CREATE TABLE #foo (bar int ...)
INSERT #foo
exec MyStoredProcedure 1
INSERT #foo
exec MyStoredProcedure 2
INSERT #foo
exec MyStoredProcedure 3
...
そして、ストアドプロシージャがINSERT..EXEC..
はすでにネストできません。または複数の結果セット。または他のいくつかの破壊的な構造
これにはINSERT EXEC
を使用できます。
declare @myRetTab table (somcolumn ...)
insert @myRetTab
exec StoredProcName @param1
次に、1つまたは複数のテーブル変数でユニオンを使用します。
あなたcanすべてを実行しますが、あなたが求めていることを考えてください......
複数のパラメーターをspに渡し、異なるパラメーターに対して同じ形式の結果セットを生成するようにします。したがって、実際には、ループを作成し、スカラーデータを使用してストアドプロシージャを繰り返し呼び出しています。
shouldで行うことは、spを書き直してパラメーターのセットを取得し、結合された結果を提供できるようにすることです。次に、1セットの操作のみを実行します。
最初に独自の型を作成する限り、2008年にspにテーブル変数を渡すことができます。
一般的なクエリはこちら
DECLARE @sql nvarchar(MAX)
DECLARE @sql1 nvarchar(MAX)
set @sql = 'select name from abc'
set @sql1 = 'select name from xyz'
EXECUTE(@sql + ' union all ' + @sql1)