相关疑难解决方法(0)

SQL:为什么在这个where子句中过滤掉NULL值?

在我的表中,我有一个可空的位列(遗留系统......),另一个开发人员最近对存储过程进行了更改,只显示位列不为真的值(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.为什么是这样?

sql t-sql sql-server-2005

5
推荐指数
2
解决办法
8811
查看次数

标签 统计

sql ×1

sql-server-2005 ×1

t-sql ×1