SQL Server - выбор строки не возвращает значений NULL. Зачем? - PullRequest
3 голосов
/ 02 июля 2010

У меня есть следующая таблица SQL:

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

Итак TestNum INT , который допускает значения NULL , и я вставил в таблицу целый ряд данных, некоторые из которых содержат строки содержит значение NULL для TestNum

Если я тогда выполню следующий запрос

select *
from Test
where TestNum != 123

Запрос aboe не возвращает строки, имеющие значение NULL . Я ожидаю, что он вернет ВСЕ строки, КРОМЕ тех, которые имеют значение 123.

Почему это?

Я выполняю этот запрос на базе данных MS-SQL 2000, импортированной в MS SQL 2005. Имеет ли это какой-либо эффект? Или это стандартное поведение для всех версий MS SQL Server?

Ответы [ 2 ]

12 голосов
/ 02 июля 2010

NULL представляет значение «неизвестно».По этой причине NULL = NULL является ложным.Если вы хотите видеть значения NULL, вы должны также сказать «ИЛИ TestNum IS NULL».

1 голос
/ 02 июля 2010

Попробуйте

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

Значения NULL обрабатываются иначе, чем другие значения. Невозможно сравнить NULL и 123; они не эквивалентны.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...