2014-12-16 5 views
3

Я знаю, что по умолчанию NULL = NULL не соответствует действительности, такNULL равенство в SQL Server 2008 R2

if null = null select 1 else select 2 

даст вам 2

Затем вы можете изменить это поведение

SET ANSI_NULLS OFF 

и результат будет 1

Мой вопрос в том, почему после установки ANSI_NULLS в положение OFF, следующий SELECT по-прежнему не возвращает вещь?

select * from (select 'a', null) ta (c1, c2), (select 'b', null) tb (c1, c2) 
where ta.c2 = tb.c2 
+1

Это может вам помочь. пожалуйста, смотрите! http://stackoverflow.com/questions/9766717/in-sql-server-what-does-set-ansi-nulls-on-means – Mitz

ответ

4

Я действительно не могу ответить, почему это так, но поведение документировано.

SET ANSI_NULLS (Transact-SQL) От

SET ANSI_NULLS ON влияет на сравнение, только если один из операндов сравнения является либо переменная, которая является NULL или буквальным NULL. Если обе стороны сравнения являются столбцами или составными выражениями, настройка не влияет на сравнение.

А также для полноты.

В будущей версии SQL Server, ANSI_NULLS всегда будет включен и любые приложения, которые явно установить опцию OFF будет генерировать об ошибке. Избегайте использования этой функции в новых разработках и планируйте для изменения приложений, которые в настоящее время используют эту функцию.

+0

Спасибо. Если я должен связать ваш ответ с поведением, которое я испытываю, я возьму «Если обе стороны сравнения являются столбцами ... настройка не влияет на сравнение» как на намерение ANSI_NULLS. – user1589188

Смежные вопросы