Sql server 2005 Case语句中的表达式-条件式,其中

Sql server 2005 Case语句中的表达式-条件式,其中,sql-server-2005,tsql,Sql Server 2005,Tsql,我正在寻找一种变通方法或解决方案,以解决我只希望使用CASE语句基于两个条件执行表达式的情况。我已经编写了一些模拟伪代码来说明我要做的事情 WHERE (RN = 1) AND CASE WHEN (@ApplicationName '' OR @ApplicationGroup '') THEN AND ( @AppFilterType = 'Groups' AND

我正在寻找一种变通方法或解决方案,以解决我只希望使用CASE语句基于两个条件执行表达式的情况。我已经编写了一些模拟伪代码来说明我要做的事情

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
具有值时才执行该条件

我正在SQLServer2005上运行的T-SQL存储过程中使用它

这在某种程度上是可能的吗


提前感谢您的帮助。

Ahh,所以根本不需要案例陈述。让我试一试。谢谢好的,我已经测试过了。没有错误,但行为不符合预期。也许我错过了什么。在我的两个参数都没有值的情况下,我根本不希望执行块。因此,它的行为应该像块根本不存在一样。现在当我运行这个时,我的记录集没有返回任何结果。我的想法是我应该把所有的东西都拿回来。当我注释掉块和块时,我得到了所有的记录。你能想出我做得不对的地方吗?试试上面修订的
WHERE
条款。
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)))
                )
        )