如果条件为空,则取得条件和案例陈述

时间:2019-07-12 07:46:29

标签: sql-server

下面是我在哪里查询条件

WHERE ResetID= CASE WHEN  NOT EXISTS (select  1 FROM ops.table where LabelItemId=@Item) THEN NULL  
                              WHEN @LastIssued < @LastDispatched THEN  1                                                           
                              WHEN  @LastIssued >= @LastDispatched  THEN  2
                              END 

如果case语句返回null,则where条件将不起作用。.没有case的此条件的任何替代解决方案

1 个答案:

答案 0 :(得分:2)

如果您想拥有NULL = NULL,则需要使用IS NULL处理它。大概,您想要的是这样:

WHERE (ResetID = CASE WHEN NOT EXISTS (select  1 FROM ops.table where LabelItemId=@Item) THEN NULL  
                      WHEN @LastIssued < @LastDispatched THEN  1                                                           
                      WHEN @LastIssued >= @LastDispatched  THEN  2
                 END
   OR (ResetID IS NULL AND NOT EXISTS (select  1 FROM ops.table where LabelItemId=@Item)))

编辑说明,这确实需要对表ops.table进行2次扫描。也许有更好的方法可以做到这一点,但是当我们只有一段代码时很难提出建议。