そのため、次のようにバッチで実行することにより、大規模なテーブル (100m 以上のレコード) を更新するのに役立つはずのコードに出くわしました。
--Declare variable for row count
set rowcount 50000
go
Declare @rc int
Set @rc=50000
While @rc=50000
Begin
Begin Transaction
--Use tablockx and holdlock to obtain and hold
--an immediate exclusive table lock. This unusually
--speeds the update because only one lock is needed.
update MyTable With (tablockx, holdlock)
set TestField='ABC'
----Get number of rows updated
----Process will continue until less than 50000
select @rc=@@rowcount
Commit
End
問題は、これが無限ループに入り、日の終わりまで priting (影響を受ける 50000 行) になることです。ちなみに、テーブルのレコード数が 50000 未満の場合、上記のコードは正しく終了します。誰でもこれを修正する方法を知っていますか?
ありがとう