Из документации MSDN :
SET ANSI_NULLS OFF
Создает следующие результаты сравнения:
10 = NULL False
NULL = NULL True
10 <> NULL True
NULL <> NULL False
Со следующей настройкой, которая используется по умолчанию:
SET ANSI_NULLS ON
То же сравнение даст следующие результаты:
10 = NULL NULL (Unknown)
NULL = NULL NULL (Unknown)
10 <> NULL NULL (Unknown)
NULL <> NULL NULL (Unknown)
Редактировать : Хорошо, поэтому в комментариях я попробовал какой-то конкретный SQL, чтобы проверить утверждения, что это не работает, и вот что я нашел:
SET ANSI_NULLS OFF
CREATE TABLE TestTable (USERNAME VARCHAR(20))
INSERT INTO TestTable VALUES (NULL)
SELECT * FROM TestTable WHERE USERNAME = USERNAME
SELECT * FROM TestTable WHERE USERNAME = NULL
Производит этот вывод:
[USERNAME]
(0 row(s) affected)
[USERNAME]
NULL
(1 row(s) affected)
Так что я думаю, что этот параметр некорректен. Я видел и использовал этот параметр только в одном конкретном запросе на создание отчетов, поэтому не знал о разнице в планах запросов, которая заставляет его работать в одном случае, а не в другом.
Тогда нет никакой настройки, которая работает.
Даже если это сработало, как и в других ответах здесь, полагаться на этот параметр - плохая идея, так как он будет извлечен из SQL Server в будущей версии.
Ну хорошо.