- 締切済み
ストアドプロシージャの条件分岐に関して
お世話になります。 以下の環境で開発を行っています。 言語:C#(.NET 2008) DB: SQL Server 2008 C#で作成した画面にて入力された値をパラメータで ストアドプロシージャに渡し、その値がNULLでない場合だけ WHERE句にレコード絞り込み条件を与えるSQL文を 考えているのですが、記述方法がわかりません。 (プロシージャ) --------------------------------------------- DECLARE @param1 = '' -- 画面から渡されるパラメータ1 @param2 = '' -- 画面から渡されるパラメータ2 SELECT * FROM TABLE1 A, TABLE2 B -- (1) IF @param1 IS NOT NULL AND @param2 IS NOT NULL -- ここから WHERE A.COLUMN1 = @param1 AND A.COLUMN2 = @param2 ELSE IF @param1 IS NOT NULL AND @param2 IS NULL WHERE A.COLUMN1 = @param1 ELSE IF @param1 IS NULL AND @param2 IS NOT NULL WHERE A.COLUMN2 = @param2 -- ここまで (2) AND A.COLUMN1 = B.COLUMN1 -- (3) AND A.COLUMN2 = B.COLUMN2 -- (4) ------------------------------------------------ 上記の(1)から(4)までをうまく1つにまとめたかたちで記述することができません。 特に上記(2)の効率のよい正しい記述方法がわかりません。 どなたかご教授願えますか? よろしくお願いいたします。
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- todo36
- ベストアンサー率58% (728/1234)
ストアド内の「動的SQL」はよろしくないようです。 (1) ストアド内に4通りのSQL文を書く (2) クライアント側でSQL文を生成 (3) SQL文を一行で書く WHERE (@param1 IS NULL OR A.COLUMN1 = @param1) AND (@param2 IS NULL OR A.COLUMN2 = @param2) # @param1がヌルのときは、A.COLUMN1を参照しないのでパフォーマンス的に大差ないはず。