Сравнение обнуляемых полей в хранимой процедуре - PullRequest
1 голос
/ 28 октября 2011

У меня проблема с хранимой процедурой.Он сравнивает новую запись с существующей, чтобы проверить наличие изменений.Это делается так:

SELECT 1 FROM Table
WHERE Id= @Id
AND Field1 = @Field1
AND Field2 = @Field2
AND Field3 = @Field3
AND Field4 = @Field4
AND Field5 = @Field5
AND LEDTS IS NULL

Кажется, что происходит сбой, когда поля имеют значение NULL.Я знаю, что = NULL не работает так, как вы этого ожидаете, но я не знал, что он также не работает в таких вещах.Когда я изменяю сравнение полей на такие вещи, как

(Field1 IS NULL AND Field2 IS NULL) OR Field1 = @Field2

, это работает.Есть лучший способ сделать это?

Ответы [ 3 ]

2 голосов
/ 28 октября 2011

Вы можете использовать проверки следующим образом:

ISNULL(Field1, '') = ISNULL(@Field1, '')

Это делает дроуб: у вас могут быть равенства, такие как

NULL='' or ''=NULL

Я не знаю, может ли это быть приемлемымв вашем сценарии.

2 голосов
/ 28 октября 2011

SET ANSI_NULLS может управлять этим поведением ... Установка SET ANSI_NULLS OFF сделает NULL = NULL оценкой истинного.

Но я бы рекомендовал не устанавливать SET ANSI_NULLS OFF, а вместо этого попытаться ограничить поля в базе данных, которые можно обнулять.

1 голос
/ 28 октября 2011

Это поведение регулируется настройкой ANSI_NULLS.По умолчанию это ON, и его нужно установить таким образом, чтобы различные вещи работали правильно (например, индексированные представления и распределенные запросы), но если вам это не нужно, вы можете отключить его.

Узнайте больше об этом на Books Online .

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