WHERE子句中的T-SQL CASE行为

时间:2019-06-11 19:46:58

标签: sql sql-server

提前感谢您的关注!

我想将工作订单状态参数(@WOStatusCriteria)发送到存储过程(在SQL Server 2016中),以便在SELECT中使用。我想查询“ R”(已发布)或“ F”(固定)或两者的状态,具体取决于当前的需求。

由于可能的状态代码为C,F,R,U和X,因此我在WHERE子句中编写了以下CASE,希望如果未在参数中显式发送R或F,则R和F状态都将通过NOT C,NOT U,NOT X短语返回。它不起作用,我正在寻找一种可行的解决方案。任何对此的想法将不胜感激。

(wo.STATUS = CASE 
    WHEN @WOStatusCriteria = 'R' THEN 'R'
    WHEN @WOStatusCriteria = 'F' THEN 'F'
END)
AND (NOT wo.STATUS = N'C' AND NOT wo.STATUS = N'U' AND NOT wo.STATUS = N'X') 

1 个答案:

答案 0 :(得分:0)

如果添加,您当前的代码应该可以工作

ELSE wo.STATUS

转到您的CASE表达式。

由于wo.STATUS将始终等于wo.STATUS,因此将忽略CASE并评估其他条件。