Разница между «<>» и «НЕ» в TSQL? - PullRequest
2 голосов
/ 07 сентября 2010

Я не понимаю.

У меня было это выражение, и оно не сработало.

IF @LocationName <> NULL AND
@Latitude <> NULL AND
@Longitude <> NULL AND
@Zoom <> NULL AND
@MapTypeId <> NULL
BEGIN
... 
END

Я изменил это выражение.

IF @LocationName Is NOT NULL  AND
@Latitude Is NOT NULL AND
@Longitude Is NOT NULL AND
@Zoom Is NOT NULL AND
@MapTypeId Is NOT NULL
BEGIN
... 
END

И это сработало ...

WTH?

Ответы [ 5 ]

7 голосов
/ 07 сентября 2010

Как и ожидалось.

Каждое сравнение с NULL всегда НЕИЗВЕСТНО (что равно ложному).

Также известен как Трехзначная логика (Википедия) и MSDN / SQL Server

3 голосов
/ 07 сентября 2010

Вы не можете проверить, является ли что-то равным (или нет) NULL, поскольку NULL имеет неизвестное значение и тип.

Вы должны проверить, IS NULL или IS NOT NULL

3 голосов
/ 07 сентября 2010

Нельзя использовать операторы сравнения при работе со значениями NULL. NULL на самом деле не какое-либо значение, поэтому вы не можете сравнить его - при попытке сравнить оно вернет UNKOWN.

Вы должны использовать IS NULL или IS NOT NULL

НЕ [НЕ] NULL

Нулевые значения

2 голосов
/ 07 сентября 2010

Поведение <> можно изменить, установив SET ANSI_NULLS.

РЕДАКТИРОВАТЬ: Однако делать это не рекомендуется, поскольку текст на странице выше предлагает.

1 голос
/ 07 сентября 2010

Это троичная логика .Это одна из основных функций SQL, и вы всегда должны помнить об этом.

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