1

シナリオ :

ストアド プロシージャから単一の結果セットを返す必要がありますが、未知の複数の値を渡すことができる配列パラメーターがあり、渡される値ごとにデータを取得する別のロジックが必要です。

SP :

PROCEDURE [dbo].[GetRecommendations]
(
  @RecommendationTypesCSV  varchar(4000) -- This could have Type1,Type2,Type3...
}

BEGIN
....
END 

このコンマ区切りの型を変換したら、各型を調べていくつかのロジックを実行する必要がありますが、必要なロジックを実行し続けると、データを収集し、最後に Union All を実行して、すべての結果を 1 つの大きなものとして返す必要があります。関連する型情報が割り当てられた type の新しい列を持つ結果セット。

If (type1)
BEGIN 
-- Do Something
END

If (type2)
BEGIN 
-- Do Something
END

If (type3)
BEGIN 
-- Do Something
END

3 つすべてをマージして結果を返します。

Column1     Column2     Column3
----------- ----------- -------
102570      10027       type1
102569      20011       type1
102568      20011       type1
102564      20011       type2
102563      20011       type2
102562      20074       type3
102561      20011       type3
102560      20011       type3
102559      10059       type3
102558      20011       type3

問題 :

DB に対して単一の呼び出し (SQL) を行うか、型ごとに複数の呼び出しを行い、型をコードにマージする (C# .Net) かを決定する必要があります。これは WCF クライアントであることを覚えておいてください。サービスとパフォーマンスに直面することは大きな意思決定要因であり、タイプは 3 つのタイプに限定されず、より多くのタイプになる可能性もあります。

単一のDB呼び出しを行うのが効率的である場合、タイプをループしてマージする唯一の可能な方法はカーソルです-例をいただければ幸いです。

4

1 に答える 1