Проблема в предложении WHERE - PullRequest
0 голосов
/ 03 августа 2010

Итак, у меня есть запрос. Это работает, если я закомментирую часть, проверяющую исключение.

WHERE H.BatchId = 3  AND H.IsExcluded != 1

IsExcluded - это битовое поле, которое принимает значения NULL.

Все значения, которые я выбираю, имеют значение NULL, поэтому ДОЛЖНЫ быть правильными. Что я делаю неправильно? Он не возвращает значений так, как есть, но если я закомментирую только «И» и после, это сработает.

Ответы [ 2 ]

9 голосов
/ 03 августа 2010
WHERE H.BatchId = 3  AND (H.IsExcluded != 1 OR H.IsExcluded IS NULL)
0 голосов
/ 03 августа 2010

В SQL NULL! = NULL, как сказал @scott, но вы можете использовать SET ANSI_NULLS OFF.

Declare @a INT = NULL
Declare @b INT = NULL
SET ANSI_NULLS OFF
IF(@b = @a)
    PRINT 'NULL is equal to NULL'
ELSE
    PRINT 'NULL is not equal to  NULL'

SET ANSI_NULLS ON
IF(@b = @a)
    PRINT 'NULL is equal to NULL'
ELSE
    PRINT 'NULL is not equal to  NULL'

Выходные данные:

  • NULL равно NULL: ANSI_NULLS установленов OFF
  • NULL не равно NULL: ANSI_NULLS установлен в ON, это поведение SQL Server по умолчанию.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...