2016-09-10 5 views
0

В хранимой процедуре У меня этот запросNULL, значение где положение

DECLARE @BadRowsCount int; 
SET @BadRowsCount = 0; 

SELECT @BadRowsCount = COUNT(*) 
FROM #ImportTemp 
WHERE #ImportTemp.Status <> 'A' AND #ImportTemp.Status <> 'B' 

И @BadRowsCount если в #ImportTemp.Status являются значениями различных, чем А или В имеет положительное значение, которое нормально.

Но если в #ImportTemp.Status является NULL @BadRowsCount 0.

Почему? NULL не отличается от A или B?

Статус определяется как:

[Status] [varchar](80) NULL 

Я должен определить ИНЕКЕ как:

WHERE (#ImportTemp.Status <> 'A' AND #ImportTemp.Status <> 'B') OR #ImportTemp.Status is NULL 

?

ответ

2

По умолчанию в SQL Server операторы сравнения возвращают UNKNOWN (т. Е. Не true или false), если значение равно null.

MSDN IS [NOT] NULL документация

Есть способы изменить, как SQL Server обрабатывает нулевые сравнения с вещами, как SET ANSI_NULLS. Определенно обратите внимание на предстоящие изменения по умолчанию для этого значения.

Описание: interesting article, который охватывает несколько вопросов, связанных с нулевой обработкой.

1

Поскольку не равен оператор (<>) является, как и большинство операторов, не NULL экономии. Это означает, что это приводит к неизвестным при сравнении с NULL.

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