Escopo de variáveis definidas em um bloco while em procedimentos armazenados - SQl Server
Encontrei um cenário interessante (pelo menos para mim) em um procedimento armazenado. Gostaria de ter opinião e pensamentos de especialistas sobre isso.
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
Eu esperava que este bloco desse a saída como abaixo
Value_10_
Value_ _
Value_8_
Value_ _
Value_6_
Value_ _
Value_4_
Value_ _
Value_2_
Value_ _
Em vez disso, obtive a saída como abaixo:
Value_10_
Value_10_
Value_8_
Value_8_
Value_6_
Value_6_
Value_4_
Value_4_
Value_2_
Value_2_
Eu pensei que se eu declarar uma variável dentro de um bloco while, para cada iteração, ela redefinirá o valor para NULL ou o valor padrão (de c # background
Se isso ocorre por design, minha pergunta é como o SQLServer trata a instrução 'DECLARE' para essa variável dentro do bloco while? Ele a ignora, pois a variável já está na memória?
Alguém pode me explicar esse comportamento?