在我的表中,我有一个可为空的位列(旧系统...),另一位开发人员最近对存储过程进行了更改,以仅显示位列不为 true 的值 (1)。因为这是一个可为空的列,我们注意到如果该列为 NULL,则不会选取记录。为什么是这样?
其他开发人员和我都同意 NULL 1...这是 SQL 中的错误还是这样设计的?看起来像是一个设计缺陷。
当前代码:
(VoidedIndicator <> 1)
建议的修复:
(VoidedIndicator <> 1 OR VoidedIndicator IS NULL)
澄清(乔恩·埃里克森)
VoidedIndicator 是一个可为空的位字段,因此它可以具有以下值:NULL、0 或 1
当使用 where 子句(例如 (VoidedIndicator 1))创建 SQL 语句时,我们仅返回具有 VoidedIndicator == 0 的记录,但我们期望 VoidedIndicator == 0 和 VoidedIndicator IS NULL。为什么是这样?
有很多好的答案,但让我给你一个非常简洁的版本。
对于 SQL,Null 并不意味着“无值”,而是意味着“未知值”
考虑到这一点,请考虑用简单的英语回答您提出的 SQL 问题。
Q: Is this unknown value not equal to 1?
A: I don't know, there is no way to tell without knowing the value.
Hence Null<>1 = Null
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)