編集:
「READPASTとUPDLOCKを使用したSQLServerでのデータキューの処理」という答えを確認するためにグーグルで検索しました。このソリューションについて読んで遊んでから何年も経ちました。
オリジナル:
READPASTヒントを使用すると、ロックされた行はスキップされます。 ROWLOCKを使用したので、ロックのエスカレーションを回避する必要があります。私が知ったように、UPDLOCKも必要です。
したがって、プロセス1は20行をロックし、プロセス2は次の20行を取得し、プロセス3は行41から60を取得します。
アップデートは次のように書くこともできます:
UPDATE TOP (20)
foo
SET
ProcessorID = @PROCID
FROM
OrderTable foo WITH (ROWLOCK, READPAST, UPDLOCK)
WHERE
ProcessorID = 0
更新、2011年10月
これは、SELECTとUPDATEを一度に必要とする場合に、OUTPUT句を使用してよりエレガントに行うことができます。