2011-12-21 52 views
1

我正在尋找解決方法,只想使用CASE語句根據兩個條件執行表達式。我寫了一些模擬僞代碼來說明我正在嘗試做什麼。Case Conditionments中的表達式 - 有條件的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有一個值執行的條件。

我使用這個在T-SQL存儲過程SQL Server上運行2005

在某種程度上這可能嗎?

在此先感謝您的幫助。

回答

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

啊,所以根本不需要Case語句。讓我試試吧。謝謝! – Jared 2011-12-21 18:17:44

+0

好的,我測試過了。沒有錯誤但不像預期的那樣行事。也許我錯過了一些東西。在這兩個參數都沒有值的情況下,我不希望塊完全執行。所以它應該像塊一樣沒有。現在當我運行這個時,我沒有從我的記錄集中得到任何結果。這個想法是我應該把所有東西都拿回來。當我註釋掉AND塊時,我會將所有記錄返回。你能想到我可能做得不對嗎? – Jared 2011-12-21 18:33:10

+0

嘗試上面修改的'WHERE'子句。 – RedFilter 2011-12-21 20:06:04