条件付きの WHERE 句を含むストアド プロシージャを作成しようとしています。NULL に初期化された名前付きパラメーターを使用し、ステートメントを呼び出すときにまだ null であるかどうか、または値があるかどうかに基づいて、それらを WHERE ステートメントに追加するかどうかを決定します。
ステートメントの例は次のとおりです。
CREATE PROCEDURE Sp_myconditionalproc (@xVariable VARCHAR(10) = NULL,
@yVariable VARCHAR(50) = NULL)
AS
BEGIN
SELECT *
FROM [MyDB].[dbo].[MYTABLE]
WHERE X = CASE
WHEN @xVariable <> NULL THEN @xVariable
ELSE X
END
AND Y = CASE
WHEN @yVariable <> NULL THEN @yVariable
ELSE Y
END
END
そして、それはを使用して呼び出されます
EXECUTE Sp_myconditionalproc
@xVariable = 'C',
@yVariable = 'AB';
何らかの理由で、これは私が期待している結果を返しません。xVariable が「C」である場合に結果を返す代わりに、xVariable が何であるかに関係なく、すべての結果を返します。xVariable と同じです。基本的に、そこに何を入れたかに関係なく、テーブル全体を返します。
このようなことを試すのはこれが初めてなので、おそらくそこに大きなギャップのある欠陥があると思いますが、それが何であるかはわかりません. 検索したい変数のみを渡すことができるように、ここで何が間違っていたのか、それを修正する方法を理解するのを誰かが手伝ってくれませんか?
ありがとうございました!=D