dポイントプレゼントキャンペーン実施中!

お世話になります。

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

よろしくお願いいたします。

A 回答 (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を参照しないのでパフォーマンス的に大差ないはず。
    • good
    • 1

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す