2011-12-21 19 views
1

CASEステートメントを使用して2つの条件に基づいて式を実行したい場合の回避策またはソリューションを探しています。私は何をしようとしているかを説明するためにいくつか疑似コードを書いています。ケースステートメントの式 - 条件付きWHERE

WHERE (RN = 1) 
AND 
    CASE 
     WHEN (@ApplicationName '' OR @ApplicationGroup '') 
      THEN 

       AND (
        @AppFilterType = 'Groups' AND [GroupName].[Name] IN (SELECT StringValue FROM [StarTeam].[dbo].fn_CSVToTable(@ApplicationGroup)) 
        OR 
        @AppFilterType = 'Apps' AND [AppName].[Name] IN (SELECT StringValue FROM [StarTeam].[dbo].fn_CSVToTable(@ApplicationName)) 
       ) 
    END

これはアイデアです、@ApplicationNameおよび/または@ApplicationGroupが値を持っている場合にのみ条件を実行します。

私は、SQL Server上で2005

を実行すると、いくつかの方法で可能です。このT-SQLストアドプロシージャでこれを使用していますか?

ご協力いただきありがとうございます。

答えて

2
WHERE RN = 1 
    AND (
      (@ApplicationName = '' and @ApplicationGroup = '') 
      or (
        (@AppFilterType = 'Groups' AND [GroupName].[Name] IN (SELECT StringValue FROM [StarTeam].[dbo].fn_CSVToTable(@ApplicationGroup))) 
        or (@AppFilterType = 'Apps' AND [AppName].[Name] IN (SELECT StringValue FROM [StarTeam].[dbo].fn_CSVToTable(@ApplicationName))) 
       ) 
     ) 
+0

ああ、ケースステートメントはまったく必要ありません。私はそれを行ってみましょう。ありがとう! – Jared

+0

申し訳ありませんが、私はこれをテストしました。エラーはありませんが、期待通りに動作しません。たぶん私は何かを見逃しています。私の両方のパラメタに値がない場合、私はブロックをまったく実行したくありません。だから、ブロックがまったくそこにないように振る舞います。今私がこれを実行すると、私のレコードセットから結果が戻ってこない。アイデアは私がすべてを取り戻すべきだということです。私がANDブロックをコメントアウトすると、すべてのレコードが返されます。私が正しいことをしていないかもしれないと思いますか? – Jared

+0

上記のWHERE節を改訂してみてください。 – RedFilter