こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

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

お世話になります。

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

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

投稿日時 - 2012-02-16 23:25:43

QNo.7309696

すぐに回答ほしいです

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

-広告-
-広告-

回答(1)

ANo.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を参照しないのでパフォーマンス的に大差ないはず。

投稿日時 - 2012-02-17 12:07:38

-広告-
-広告-

あなたにオススメの質問

-広告-
-広告-