【发布时间】:2014-08-01 07:41:47
【问题描述】:
我们需要另一个大规模更新,因为存在大量锁定问题的风险,因此需要停机。基本上,我们希望在工作时间更新数亿行。
现在,将更新减少到可管理的
是的,我知道这听起来很奇怪,但请耐心等待。怎么做呢?
我在想这样的事情:
WHILE @@ROWCOUNT > 0
BEGIN
UPDATE TOP (5000) T
SET T.VALUE = 'ASD'
FROM MYTABLE T
JOIN (SELECT TOP 5000 S.ID
FROM MYTABLE S WITH (READPAST, UPDLOCK)
WHERE X = Y AND Z = W etc...) SRC
ON SRC.ID = T.ID
END
有什么想法吗?基本上,我想要的最后一件事是让这个查询卡在其他可能长时间运行的事务中,或者作为回报对其他人做同样的事情。所以我在这里寻找的是一个脚本,它将跳过锁定的行,更新它可以最小化涉及锁定或死锁的风险,因此它可以在正常运行期间安全地运行一个小时左右。
【问题讨论】:
标签: sql sql-server sql-server-2012 locking