Я нашел интересный сценарий (по крайней мере для меня) в хранимой процедуре. Хотелось бы иметь мнение экспертов и мысли об этом.
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 _
значение_2 _
значение_2 _
Я думал, что если объявить переменную внутри блока while, то для каждой итерации она будет reset значением NULL или значением по умолчанию (из фона С#).
Если это по дизайну, то мой вопрос в том, как SQLServer обрабатывает оператор DECLARE для этой переменной внутри блока? Не игнорирует ли он это, поскольку переменная уже находится в памяти?
Может кто-нибудь, пожалуйста, объясните мне это поведение? Пожалуйста, со мной, если ты обнаружишь, что это глупо. Я все еще участвую:)
Обновление: Спасибо всем за примеры и объяснения. Сегодня вы заставили меня узнать новое.