web-dev-qa-db-ja.com

複数のストアドプロシージャの結果を結合する

ストアドプロシージャがあり、毎回異なるパラメーターを渡して、複数の異なる時間を呼び出す必要があります。結果を単一のデータセットとして収集したいと思います。このようなものは可能ですか...

exec MyStoredProcedure 1
UNION
exec MyStoredProcedure 2
UNION
exec MyStoredProcedure 3

上記の構文を使用しようとしましたが、エラーが発生しました...

Incorrect syntax near the keyword 'UNION'

私が扱っているストアドプロシージャは非常に複雑で、「ブラックボックス」のようなものです。そのため、ストアドプロシージャの定義に入って何も変更することはできません。結果を収集する方法に関する提案はありますか?

SQL Server 2008 R2を使用しています。助けてくれてありがとう。

43
webworm

このような一時テーブルを使用する必要があります。 UNIONはSELECT用であり、ストアドプロシージャではありません

CREATE TABLE #foo (bar int ...)

INSERT #foo
exec MyStoredProcedure 1

INSERT #foo
exec MyStoredProcedure 2

INSERT #foo
exec MyStoredProcedure 3

...

そして、ストアドプロシージャがINSERT..EXEC..はすでにネストできません。または複数の結果セット。または他のいくつかの破壊的な構造

70
gbn

これにはINSERT EXECを使用できます。

declare @myRetTab table (somcolumn ...)
insert @myRetTab
exec StoredProcName @param1

次に、1つまたは複数のテーブル変数でユニオンを使用します。

11
Ben

あなたcanすべてを実行しますが、あなたが求めていることを考えてください......

複数のパラメーターをspに渡し、異なるパラメーターに対して同じ形式の結果セットを生成するようにします。したがって、実際には、ループを作成し、スカラーデータを使用してストアドプロシージャを繰り返し呼び出しています。

shouldで行うことは、spを書き直してパラメーターのセットを取得し、結合された結果を提供できるようにすることです。次に、1セットの操作のみを実行します。

最初に独自の型を作成する限り、2008年にspにテーブル変数を渡すことができます。

4

一般的なクエリはこちら

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)
2
Vikrant Shitole