sql - 排除 NULL 值。为什么?

标签 sql sql-server sql-server-2008

这是关于我在 Microsoft Sql Server 中发现的奇怪行为。如果我错了,请纠正我。

SELECT COUNT(*) FROM TABLEA 
WHERE [Column1] IS NULL;

这将返回 30018 行。

CREATE VIEW VIEWB AS 
SELECT * FROM TABLEA AS t1 
WHERE t1.[Column1] NOT IN ('Cross/Up sell', 'Renegotiation', 'Renewal')  

如果我检查VIEWB,我在Column1中找不到NULL:

SELECT COUNT(*) FROM VIEWB 
WHERE [Column1] IS NULL;

这将返回 0 行。

为什么?上面的查询排除了 3 个值,但它不应该排除 NULL。为什么Ms Sql Server 会这样?我应该预料到会这样吗? 我该如何修复它?

最佳答案

这实际上是 SQL Server 将 NULL 视为值时犯的一个常见错误。默认情况下,它被视为未知,如文档 here 所示。 。因此,在您看来,您还需要包含 OR t1.[Column1] IS NULL

您可以通过调用SET ANSI_NULLS OFF来更改此行为。但是,不建议使用此功能,因为正如@Martin Smith 指出的那样,该功能已被弃用。

但是,这不是 SQL Server 特定的问题。它是 ANSI SQL standard 的一部分.

关于sql - 排除 NULL 值。为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11491831/

相关文章:

MySQL:从记录集中选择具有表名的表

SQL Server 2014 - 列出存储过程中使用的所有函数和子函数

sql - 如何更改.net RDLC报告中的日期格式?

sql-server - 如何安排 SQL Server 2016 数据库备份

sql-server - 在 Sql Server 2008 中为 View 建立索引实际上会复制原始数据吗?

sql - 从最大查询中选择列名

SQL 标量函数的同义词

sql-server - SQL CTE 递归 : Returning Parent Records

java - 从 SQL 中同一行的另一列获取值

sql-server - SQL 服务器 : NOT IN in where clause not working with NVARCHAR