【发布时间】:2019-04-17 14:42:55
【问题描述】:
我最近注意到,在尝试遍历表的行时,如果我在涉及 @@ROWCOUNT 的循环条件之前有 PRINT 语句,我的循环不会运行。
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 一个)。
我尝试阅读PRINT statement,但没有发现任何影响@@ROWCOUNT。
我的问题是,为什么 PRINT 会影响 @@ROWCOUNT,为什么没有更清楚地记录它,因为这会导致一些难以调试的错误?
更新
经过更多研究,我确实找到了
USE、SET、DEALLOCATE CURSOR、CLOSE CURSOR、PRINT、RAISERROR、BEGIN TRANSACTION 或 COMMIT TRANSACTION 等语句将 ROWCOUNT 值重置为 0。
【问题讨论】:
标签: sql sql-server tsql rowcount