Я работаю в SQL Server 2008. Мой текущий скрипт имеет SET ANSI_NULLS ON (т. Е. Если сравнение работает с выражением NULL, то сравнение возвращает UNKNOWN, а не TRUE или FALSE) , Выполняет ли оператор IF выполнение пакета T-SQL, следующего за ним, только когда оператор IF возвращает TRUE? Или, может ли он выполняться, когда оператор IF возвращает UNKNOWN?результат инструкции IF для NULL
В качестве теста случае, я пытаюсь определить, что происходит в следующем IF заявлении:
IF CONVERT(varchar(10), @some_date, 101) = '01/01/1900'
do things
Насколько я знаю, «делать вещи» будет выполнять, только если данная IF оператор возвращает значение TRUE , Итак, в качестве примера, если @some_date = '01/01/1901 ', то оператор IF возвращает FALSE, что означает, что «делать вещи» не будет выполняться. В качестве другого примера, если @some_date имеет значение NULL, CONVERT также возвращает NULL (я думаю), что означает, что NULL будет (будет пытаться) сравниваться с '01/01/1900 ', что означает, что оператор IF возвратит UNKNOWN (потому что ANSI_NULLS включен). Поскольку UNKNOWN не является TRUE, тогда «делать вещи» не будет выполняться. Насколько я понимаю это правильно?
Сравнение (NULL = anything) всегда неверно. – Jeremy
Есть ли вопрос, стоящий за этим вопросом? потому что пока это вопрос, на который вы можете ответить, проверив его самостоятельно. –
Да, в этом контексте значение null считается ложным. – shawnt00