シナリオ :
ストアド プロシージャから単一の結果セットを返す必要がありますが、未知の複数の値を渡すことができる配列パラメーターがあり、渡される値ごとにデータを取得する別のロジックが必要です。
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呼び出しを行うのが効率的である場合、タイプをループしてマージする唯一の可能な方法はカーソルです-例をいただければ幸いです。