2014-12-01 2 views
1

Я знаю, что это просто, но я не могу найти ответ в Интернете. Возьмите этот кусок кода.Значения переменных по умолчанию T-SQL

declare @year int  
declare @orderdate datetime  
set @orderdate = (select orderdate from [table] where [id = variable id])  
if @orderdate between '01-Apr-2005 00:00' and '31-Mar-2006 23:59'  
    set @year = 2005  

Этот раздел с жестким кодированием присваивает год 2005 году, если он находится в этом диапазоне дат. В противном случае? Ну, я не знаю.

Я попытался добавить заявление печати, чтобы распечатать значение, но механизм T-SQL просто пропускает код. Итак, что такое - его значение, если приведенный выше оператор if не выполняется? Можно ли это назвать ценностью?

+1

Вы попробовали PRINT ISNULL (CONVERT (varchar, @OrderDate), 'None') для вашего заявления на печать. Печать NULL трудно увидеть (пустая строка) – Kamal

+0

@Kamal: Нет, я попробую это сейчас. Я попробовал напечатать строку с надписью «год:», а затем конкатенацию с значением года - но это пропустило всю строку –

+3

строка + NULL = NULL в sql-сервере – Kamal

ответ

0

Так каково его значение, если приведенный выше оператор if не выполняется?

Если состояние if заявления, является ложным и set @year = 2005 таким образом, не выполняется, @year будет держать любое значение, это было как раз перед if заявлением. Поскольку в вашем фрагменте кода нет других операторов set @year, @year сохранит значение, присвоенное ему в точке объявления. А так как оператор declare @year не указывает начальное значение для переменной, то @year, следовательно, будет NULL.

Можно ли назвать его имеющим значение?

Ну, это зависит от того, считаете ли вы значение NULL с технической точки зрения. По этому вопросу нет общего согласия. Если вы считаете это неопределенным значением, то да, @year все еще можно сказать, что оно имеет значение. (Фактически, переменную тогда можно было бы назвать всегда имеют значение.) Если, однако, вы предпочитаете считать NULL как отсутствие значения, тогда, очевидно, ответ будет «нет».

Причина, по которой вы не могли видеть, что она была NULL с помощью инструкции PRINT, состоит в том, что NULL не печатаются. Более конкретно, PRINT <an expression that evaluates to NULL> создает пустую строку, как уже было сказано в комментариях.

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