2011-08-20 1 views
2

私は3つのパラメータを持つストアドプロシージャを持っています。 Null/Not Nullのすべての組み合わせをチェックしたいが、Elseと一緒に16種類のSelectステートメントを書くのではなく、どうすればそれを書くことができるのだろうか?ここに私の例では、...現在SQL:Null/Not Null条件で3つのパラメータのストアドプロシージャを記述すると、より良い(より短い)方法が得られますか?

... 
    ELSE IF @team  IS NOT NULL AND 
      @position IS NULL  AND 
      @filter IS NOT NULL 

     BEGIN 
      SELECT  P1.PlayerKey, P1.Player, P2.Position, P1.Height, P1.Weight, P1.Speed, P1.Status 
      FROM   Player AS P1 
      INNER JOIN Position AS P2 ON P1.PositionID = P2.PositionID 
      INNER JOIN Team AS T1 ON T1.TeamID = P1.TeamID 
      WHERE   P1.TeamID = @team AND P1.Player LIKE '%' + @filter + '%' 
      ORDER BY  P2.PosSort; 
     END 

    ELSE IF @team  IS NULL  AND 
      @position IS NOT NULL AND 
      @filter IS NOT NULL 

     BEGIN 
      SELECT  P1.PlayerKey, P1.Player, P2.Position, P1.Height, P1.Weight, P1.Speed, P1.Status 
      FROM   Player AS P1 
      INNER JOIN Position AS P2 ON P1.PositionID = P2.PositionID 
      INNER JOIN Team AS T1 ON T1.TeamID = P1.TeamID 
      WHERE   P2.Position = @position AND P1.Player LIKE '%' + @filter + '%' 
      ORDER BY  P2.PosSort; 
     END  

    ELSE IF @team  IS NOT NULL AND 
      @position IS NULL  AND 
      @filter IS NOT NULL 

     BEGIN 
      SELECT  P1.PlayerKey, P1.Player, P2.Position, P1.Height, P1.Weight, P1.Speed, P1.Status 
      FROM   Player AS P1 
      INNER JOIN Position AS P2 ON P1.PositionID = P2.PositionID 
      INNER JOIN Team AS T1 ON T1.TeamID = P1.TeamID 
      WHERE   P1.TeamID = @team AND P1.Player LIKE '%' + @filter + '%' 
      ORDER BY  P2.PosSort; 
     END 
... 

答えて

2
SELECT 
    P1.PlayerKey, P1.Player, P2.Position, P1.Height, P1.Weight, P1.Speed, P1.Status 
FROM Player AS P1 
INNER JOIN Position AS P2 
    ON P1.PositionID = P2.PositionID 
INNER JOIN Team AS T1 
    ON T1.TeamID = P1.TeamID 
WHERE (@team IS NULL OR P1.TeamID = @team) 
AND (@filter IS NULL OR P1.Player LIKE '%' + @filter + '%') 
AND (@position IS NULL OR P2.Position = @position) 
ORDER BY P2.PosSort; 
+0

クールです!本当にありがとう。私はそこに別の方法がなければならないことを知っていましたが、それを見た後で...明らかです。本当にありがとう! – daveomcd

関連する問題