假设我有一个更新,例如:
UPDATE [db1].[sc1].[tb1]
SET c1 = LEFT(c1, LEN(c1)-1)
WHERE c1 like '%:'
此更新基本上将遍历数百万行并修剪冒号(如果 c1 列中有冒号)。
我如何跟踪表中的进展情况?
Thanks
这是 SQL Server 2008
您可以使用 sysindexes 表,它跟踪索引的更改量。因为这是在原子更新中完成的,所以它没有机会重新计算统计数据,所以rowmodctr
将继续增长。有时,这在小表中并不明显,但对于数百万人来说,它会显示出来。
-- create a test table
create table testtbl (id bigint identity primary key clustered, nv nvarchar(max))
-- fill it up with dummy data. 1/3 will have a trailing ':'
insert testtbl
select
convert(nvarchar(max), right(a.number*b.number+c.number,30)) +
case when a.number %3=1 then ':' else '' end
from master..spt_values a
inner join master..spt_values b on b.type='P'
inner join master..spt_values c on c.type='P'
where a.type='P' and a.number between 1 and 5
-- (20971520 row(s) affected)
update testtbl
set nv = left(nv, len(nv)-1)
where nv like '%:'
现在在另一个查询窗口中,连续运行以下命令并观察 rowmodctr 的不断上升。rowmodctr
vs rows
如果您知道自己在哪里,则可以让您知道自己在做什么rowmodctr
需要最终成为。在我们的例子中,这一数字是刚刚超过 200 万的 67%。
select rows, rowmodctr
from sysindexes with (nolock)
where id = object_id('testtbl')
请不要在表上运行(nolock)计数查询itself
当它正在更新时。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)