【发布时间】:2017-01-03 18:33:48
【问题描述】:
我一直在寻找这个问题的答案,但我相信这对其他人也可能是有用的信息。
我在 SQL Server Management Studio 中使用 TSQL。由于我们的系统处理信息的方式,最好以较小的批次进行更新。我们使用的一个技巧是将更新包装在一个 while 循环中:
while (@@Rowcount <> 0)
begin
update top (800) etc etc
end
我创建了一个作业来定期进行此更新,虽然这在查询窗口中有效,但它似乎不适用于作业。作业开始时是否填充行计数值?
【问题讨论】:
-
如果你想让
@@ROWCOUNT不为0,就在循环之前加上SELECT 1;。 -
零作为@@ROWCOUNT 的初始值对我来说很有意义。我认为它在 SQL Server Management Studio 中工作的原因是因为 Management Studio 在执行在查询窗口中输入的内容之前在同一连接上发出了一堆命令。当然修复它应该是直截了当的,只需按照 DVT 的建议选择一些常量。
-
WHILE 1 = 1 BEGIN; UPDATE ...; IF @@ROWCOUNT = 0 BREAK; END。因为@@ROWCOUNT在你放屁时(隐喻地)会重置,所以最好只在声明之后立即使用它,而不是在你没有发布之前使用它。顺便说一句,WHILE 1 = 1 ... BREAK构造在您使用游标时也能很好地工作(以避免重复FETCH语句)。
标签: sql-server tsql ssms jobs rowcount