【发布时间】:2016-03-24 05:23:25
【问题描述】:
我需要根据下拉列表值向存储过程添加过滤器
可用值为 0,1,2,3,4,5。 @TescilDurum 是我的参数。
0 = ALL
1 = TescilDurumId IN 4 OR 5
2 = t.ID IS NULL
3 = dncts.RegistrationCode IS NULL
4 = hsm.ID IS NULL AND dncts.RegistrationCode IS NULL IS NOT NULL
5 = hsm.ENSMRN IS NULL
到目前为止,我从互联网上的一个类似问题答案中尝试过这个,但我不确定这是否是正确的做法。我不确定这种“反向逻辑”是否是正确的方法。并且 order by after 它也给出了错误...
AND 1 =
CASE WHEN @TescilDurum = 1 AND t.TescilDurumId NOT IN (4,5) THEN 0
ELSE CASE WHEN @TescilDurum = 2 AND t.Id IS NOT NULL THEN 0
ELSE CASE WHEN @TescilDurum = 3 AND hsm.EnsMRN IS NOT NULL THEN 0
ELSE CASE WHEN @TescilDurum = 4 AND hsm.Id IS NOT NULL AND dncts.RegistrationCode IS NULL THEN 0
ELSE CASE WHEN @TescilDurum = 5 AND hsm.EnsMRN IS NOT NULL THEN 0
ELSE 1 END
【问题讨论】:
-
所有使用
ELSE CASE的地方都是多余的。 case 语句在 SQL 中每个 WHEN 部分的工作方式与其他语言中的“elseif”相同。
标签: sql-server tsql sql-server-2008-r2 case where-clause