SQL Server - 选择一行不会返回任何NULL值。为什么?

时间:2010-07-02 15:10:09

标签: sql-server select null conditional-statements

我有以下SQL表:

CREATE TABLE [dbo].[Test](
    [TestID] [int] NOT NULL,
    [TestNum] [int] NULL,
    [TestReason] [varchar](50) NULL
)

所以 TestNum 一个 INT ,允许 NULL 值,我已经在表格中插入了大量数据,其中一些这些行包含 TestNum

NULL

如果我然后运行以下查询

select *
from Test
where TestNum != 123

查询aboe不会返回任何具有 NULL 值的行。我希望它返回所有行,除了值为123的那些行。

为什么会这样?

我在导入MS SQL 2005的MS-SQL 2000数据库上运行此查询。这有什么影响吗?或者,此行为是否适用于所有版本的MS SQL Server?

2 个答案:

答案 0 :(得分:12)

NULL表示值“unknown”。因此,NULL = NULL为false。如果要查看NULL,还必须说“OR TestNum IS NULL”。

答案 1 :(得分:1)

尝试

SELECT * FROM Test WHERE TestNum != 123 OR TestNum IS NULL

NULL值的处理方式与其他值不同。 无法比较NULL123;它们并不等同。