Когда вы имеете дело с NULL в SQL Server , вы в основном работаете с 3-значной логикой со всеми значениями .
Так что вВаш пример
IF(@myVar != null)
против IF(@myVar is not null)
В основном все сводится к вопросу, в чем разница между: @myVar = null
против @myVar is null
@myVar = null
всегда будет иметь значение null, поскольку то, что вы спрашиваете:
- это значение в @myVar , равное UNKNOWN
Поскольку вы не знаетечто НЕИЗВЕСТНО - на этот вопрос нельзя ответить да или нет, поэтому он оценивается как НЕИЗВЕСТНО
e.g.
"is 1 = UNKNOWN" - I do not know
"is 'a' = UNKNOWN" - I do not know
"is UNKNOWN = UNKNOWN" - I do not know
Последний может быть немного сложным, но просто представьте, что у вас есть 2 поля сяблоки, и вы не знаете ни сколько яблок в коробке 1, ни в коробке 2, поэтому спрашивайте:
is count(box1) = count(box2)
is the same as
is UNKNOWN = UNKNOWN"
так что ответ I do not know
второй @myVar is null
отличаетсякак это все равно, что спрашивать
is the value in @myVar UNKNOWN
, так что разница в том, что вы спрашиваете "верно ли, что значение, хранящееся впеременная НЕИЗВЕСТНА? ", поэтому
"is 1 UNKNOWN" - NO
"is 'a' UNKNOWN" - NO
"is UNKNOWN UNKNOWN" - YES