他のセッションがこれらのレコードを処理しないようにするために、テーブルからいくつかのレコードを選択し、これらのレコードの主キーを一時テーブルに格納し、レコードに排他ロックを適用する必要がある状況があります。私はヒントをロックしてこれを達成します:
begin tran
insert into #temp
select pk from myTable with(xlock)
inner join otherTables, etc
(Do something with records in #temp, after which they won't be candidates for selection any more)
commit
問題は、必要以上に多くのレコードがロックされていることです。実際に一時テーブルに挿入されたレコードのみをロックしたいと思います。最初は、(ロック ヒントを使用するのではなく) レコードが使用中であることを示すフラグをテーブルに設定していましたが、状況によって 1 つ以上のレコードが処理されない場合、データベースが無効な状態のままになるため、これには問題がありました。