Я недавно заметил, что при попытке цикла по строкам таблицы мой цикл не будет выполняться, если бы у меня был оператор PRINT
до условия цикла, включающего @@ROWCOUNT
.
declare @s int;
select top 1 @s=sequence from myTable order by sequence;
while @@rowcount > 0
begin
print @s
select top 1 @s=sequence from myTable where sequence > @s order by sequence;
end
print @s
Приведенный выше код печатает то, что ожидается;последовательность чисел для каждой строки в таблице, но,
declare @s int;
select top 1 @s=sequence from myTable order by sequence;
print @s
while @@rowcount > 0
begin
print @s
select top 1 @s=sequence from myTable where sequence > @s order by sequence;
end
print @s
печатает только первое значение последовательности дважды (по одному для каждого PRINT
вне цикла).
Iпопытался прочитать оператор PRINT , но не нашел в нем ничего, что могло бы повлиять на @@ROWCOUNT
.
Мой вопрос: почему это PRINT
влияет на @@ROWCOUNT
и почему это не так?ясно задокументировано, потому что это может вызвать некоторые ошибки, которые трудно отладить?
ОБНОВЛЕНИЕ
После дополнительных исследований я нашел
Заявления такиев качестве ИСПОЛЬЗОВАНИЯ, УСТАНОВКИ, КУРСОРА ВЫКЛЮЧЕНИЯ, ЗАКРЫТИЯ КУРСА, ПЕЧАТИ, РЕЙЗЕРА, РАБОТЫ СЧЕТА или ТРАНЗАКЦИИ КОМИТЕТА установите значение ROWCOUNT в 0.
из @@ ROWCOUNT документов Microsoft