• 締切済み

ストアドプロシージャの条件分岐に関して

お世話になります。 以下の環境で開発を行っています。 言語: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)の効率のよい正しい記述方法がわかりません。 どなたかご教授願えますか? よろしくお願いいたします。

みんなの回答

  • todo36
  • ベストアンサー率58% (728/1234)
回答No.1

ストアド内の「動的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を参照しないのでパフォーマンス的に大差ないはず。