1

条件付きの 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

4

1 に答える 1