5

私には2つの手順があります-いくつかのサブセレクトとユニオンを持つ2つの巨大なセレクトのセットです。これらの手順の結果を結合する必要がありますが、それでも個別に存在する必要があります。

そんな感じ:

if @Param = 1 Then 
    PROCEDURE1
if @Param = 2 THEN 
    PROCEDURE2
if @Param = 3 Then
    PROCEDURE1 union PROCEDURE2

プロシージャを結合することは不可能であり、一時テーブルを使用できないことを読みました。

何か案が?

4

4 に答える 4

7

プロシージャをビューに変換できます。

また

プロシージャを一時テーブルに実行してから、他のプロシージャを同じ一時テーブルに実行できます。

create table #sometable (table definition here)

if @Param = 1 or @Param = 3 begin
    insert #sometable exec PROCEDURE1
end

if @Param = 2 or @Param = 3 begin
    insert #sometable exec PROCEDURE2
end

select * from #sometable
于 2010-01-09T18:29:15.850 に答える
3

次のいずれかを実行できます。

1)データを一時テーブルに挿入し、そこからSELECTします。

--Define #t here, with correct schema to match results returned by each sproc
INSERT #t EXECUTE PROC1
INSERT #t EXECUTE PROC2
SELECT * FROM #t

2)sprocから2つの結果セットを返し、呼び出し元のコードに2つの結果セットを処理させるだけです。

于 2010-01-09T18:29:54.797 に答える
2

この状況を処理するには、さまざまな方法があります。

  1. テーブル値のユーザー定義関数(UDF)
  2. ビュー
  3. 動的SQL
  4. 一時テーブル

質問には具体的な詳細が欠けているため、お互いを推奨することは難しく、調整された答えを提供することははるかに困難です。ロジックを単一のクエリ内で実行できる可能性があります。

于 2010-01-09T18:58:53.257 に答える
1

一時テーブルを使用しない場合、私が考えることができる方法は他に2つだけです。

  1. 可能であれば、s'procをビューに変換します。

  2. procを呼び出すロジックをアプリケーションに移動します(存在する場合)。各procを個別に実行し、結果を組み合わせます。

于 2010-01-09T18:48:12.390 に答える