Я столкнулся с интересным сценарием (по крайней мере для меня) в хранимой процедуре. Хотели бы иметь мнение экспертов и мысли по этому поводу.
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_
Value_ _
Value_8_
Value_ _
Value_6_
Value_ _
Value_4_
Value_ _
Value_2_
Value_ _
Вместо этого я получил вывод, как показано ниже:
Value_10_
Value_10_
Value_8_
Value_8_
Value_6_
Value_6_
Value_4_
Value_4_
Value_2_
Value_2_
Я думал, что если я объявлю переменную внутри блока while, то для каждой итерации он будет сбрасывать значение в NULL или значение по умолчанию (из c # background).
Если это умышленно, то мой вопрос заключается в том, как SQLServer обрабатывает оператор DECLARE для этой переменной внутри блока while? Это игнорирует это, поскольку переменная уже находится в памяти?
Может кто-нибудь объяснить мне такое поведение?