在我的表中,我有一个可空的位列(遗留系统......),另一个开发人员最近对存储过程进行了更改,只显示位列不为真的值(1).因为这是一个可以为空的列,所以我们注意到如果列为NULL,则记录未被拾取.为什么是这样?
其他开发人员和我同意NULL <> 1 ...这是SQL中的错误还是这样设计的?看起来像一个设计缺陷.
现行代码:
(VoidedIndicator <> 1)
Run Code Online (Sandbox Code Playgroud)
建议修复:
(VoidedIndicator <> 1 OR VoidedIndicator IS NULL)
Run Code Online (Sandbox Code Playgroud)
澄清(作者Jon Erickson)
VoidedIndicator是一个可空的位字段,因此它可以具有以下值:NULL,0或1
当使用诸如(VoidedIndicator <> 1)之类的where子句创建SQL语句时,我们只获得返回的具有VoidedIndicator == 0的记录,但我们期望VoidedIndicator == 0和VoidedIndicator IS NULL.为什么是这样?