Я столкнулся с интересным сценарием (по крайней мере, для меня) с хранимой процедурой. Хотелось бы узнать мнение и мнение экспертов по этому поводу.
DECLARE @loopcounter INT
SET @loopcounter=10
WHILE @loopcounter > 0
BEGIN
DECLARE @insidevalue int
IF (@loopcounter%2 = 0)
SET @insidevalue = @loopcounter
PRINT 'Value_' + CAST(@insidevalue AS NVARCHAR) + '_'
SET @loopcounter = @loopcounter - 1
END
Я ожидал, что этот блок даст результат, как показано ниже
Value_10_ Ценность_ _ Значение_8_ Ценность_ _ Значение_6_ Ценность_ _ Значение_4_ Ценность_ _ Значение_2_ Ценность_ _
Вместо этого я получил следующий вывод:
Значение_10_
Значение_10_
Значение_8_
Значение_8_
Значение_6_
Значение_6_
Значение_4_
Значение_4_
Значение_2_
Значение
Я подумал, что если я объявлю переменную внутри блока while, то для каждой итерации будет сброшено значение NULL или значение по умолчанию (из фона C #).
Если это сделано намеренно, то мой вопрос: как работает SQLServer обработать оператор DECLARE для этой переменной внутри блока while? Он игнорирует это, поскольку переменная уже находится в памяти?
Кто-нибудь, пожалуйста, объясните мне это поведение?