Во второй раз вокруг l oop переменная @LossScenarioID
НЕ автоматически повторно инициализируется в NULL. И, если запрос TOP 1 не находит совпадающих результатов, это НЕ повторно инициализирует переменную в NULL. Присвоение переменной не происходит - она сохранит предыдущий идентификатор, который у нее был, и, следовательно, почему она будет постоянно l oop.
Это ожидается, хотя я уже видел эту поездку раньше! Поэтому вам определенно следует вручную повторно инициализировать переменную в NULL в начале каждой итерации.
В более широком смысле, операций RBAR (Row-By-Agonizing-Row) обычно следует по возможности избегать, в пользу основанных на множестве подходов. Вы обнаружите, что лучше получите лучшую производительность, более масштабируемое решение и избежите определенных ловушек, подобных этой.