Я удивлен, что он печатает четыре буквы в вашей системе, @i < @Count
должен ограничить вывод до 3 строк.
Обычно вы можете полагаться на назначения столбцов, которые оцениваются по порядку.Но подзапрос может быть оценен в другом порядке (или даже преобразован в объединение для эффективности.) Если вы отделяете назначения от запроса, используя подзапрос:
SELECT @ID = ID
, @Value = TheVal
FROM (
SELECT ID
, (SELECT Value FROM #temp WHERE ID = @ID) as TheVal
FROM #temp
WHERE @i = ID
) sub
Результат должен быть надежным.Здесь это b a b
, потому что оно начинается с @id = 2
, а затем увеличивается с каждым циклом после обновления значения TheVal
.
Использование такого рода приемов делает кодэто трудно поддерживать.Иногда это может быть необходимо для производительности, но если это не так, попробуйте написать для ясности:)