在更新触发器中,我比较两个可为null的日期时间,这两个时间在我当前的测试中恰好为null,并且返回它们不相等。
@ExpirationDateChanged = case when i.ExpirationDate = d.ExpirationDate then 0 else 1 end
在这种情况下,i.ExpirationDate和d.ExpirationDate为null,但我得到的不是预期的0,而是1。
有人能解释这种行为吗?
NULL
不等于使用相等比较的NULL
。
在ANSI设置(默认值)下,比较NULL值是否相等为UNKNOWN
您需要添加一个额外的条件来使用IS NULL
:显式测试这两列的NULL
@ExpirationDateChanged = case
when (i.ExpirationDate IS NULL AND d.ExpirationDate IS NULL) OR
i.ExpirationDate = d.ExpirationDate then 0
else 1
end