下面是我在哪里查询条件
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的此条件的任何替代解决方案
答案 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次扫描。也许有更好的方法可以做到这一点,但是当我们只有一段代码时很难提出建议。