2012-01-19 25 views
0

を組み合わせ、私は2つのSQL Serverのストアドプロシージャ例えばSQLストアドプロシージャが結果

書かれています:今、私は個別に、次のコマンドを使用してそれらを呼び出すことができます

create PROCEDURE query1 
AS 
SQL code here... 

create PROCEDURE query2 
AS 
SQL code here... 

を、と返される値は以下の通りです。

exec query1 
exec query2 

し、それが結果に従うが、何とかその、今そのは私に構文エラーを与える作業のようなものを与える:

exec query1 

Study availability 
ACR  99.97% 

は今、私は、これらのストアドプロシージャを組み合わせて、ワンショットで結果を取得するには、同じようにしたいです。 2つのストアドプロシージャを結合し、1つのレポートで結果を得るにはどうすればよいですか?

これは、あなたが記述方法(すなわちEXEC Query1を幹部のQUERY2)、それらを呼び出すことはできませんT-SQLクエリ

Study availability 
ACR  99.97% 
FOS  87.88% 
+1

構文エラーに加えていくつかのコードを入力すると、あなたの投稿を読んでいる人に役立つかもしれません。 – Dan

+0

このデータを消費するのは何ですか? Crystal Reportsなどのレポートツール? –

答えて

1

どちらも同じ列見出し/データ型を返すので、2つの別々のクエリを1つのクエリに結合し、UNION ALLを使用することをお勧めします。

EX:

SELECT 'ACR'  AS Study, 
     SomeField AS Availability 
FROM SomeTable1 

UNION ALL 

SELECT 'FOS'  AS Study, 
     SomeField AS Availability 
FROM SomeTable2; 

それはあなたの実際のストアドプロシージャを見ずに、より具体的なアドバイスを与えることは困難ですが、これは間違いなく、2つの独立した手順を持つよりもはるかに明確です。お役に立てれば。

+0

あなたは100%正しいです私はあなたのコードを試して、それは動作します!ありがとう!! – Satish

6

です。

declare @result as table (
ACR float, 
FOS float 
) 

INSERT INTO @result(ACR) 
exec query1 

INSERT INTO @result(FOS) 
exec query2 

SELECT ACR,FOS from @result 
+0

素晴らしい!ありがとう!! – Satish

+0

私はあなたのコードを実行しようとしましたが、誤った構文をダブルで与えました。私はMS SQL 2008サーバーでこのコードを実行しています。 – Satish

+0

@Satish私の答えを訂正しました。構文に誤りがありました。申し訳ありません。 – Icarus

1

あなたはそれを試すことができます:

exec query1; exec query2 

しかし、結果が結合されていないことに注意して、あなただけのように両方のSPの結果を得るここで、各procのを想定して一つの代替は、単一の値を返しています別々の結果セット。

+0

あなたの構文では、最初のクエリの結果が1つだけです。 2番目のクエリを実行していないように見えます。私は別の結果が必要です。 – Satish

0

あなたのコードによっては、各SPの結果を表に挿入し、それらを結合して単一の結果セットを得ることができますが、これは多くの場合、結果をクライアントにストリーミングするのではなく、コピーを作成しているからです。また、一時表に書き込む必要があるため、オプティマイザが境界を越えて物を結合する能力が損なわれます。

procsが複雑でない場合は、それらをビューまたはインラインテーブル値関数にすることを検討します。これらは、ビュー、関数、またはプロシージャなどの他のルーチンと簡単に組み合わせることができ、物をよりモジュラ化します。

+0

私はそれを試してみましたexec query1 UNION exec query2 – Satish

+0

@Satish右、あなたはprocsでそれを行うことはできません。だから私はあなたがテーブルにそれらを出力してから、ユニオンを選択しなければならないと言ったのです。また、可能な場合は他のデータベース構成を使用することをお勧めします。たとえば、テーブル値関数を使用すると、SELECT * FROM TVF1(params)UNION TVF2(params) –

関連する問題