Редактиране:
Търсих в Google, за да проверя отговора си:„Обработка на опашки с данни в SQL Server с READPAST и UPDLOCK“. Изминаха години, откакто четох и играх с това решение.
Оригинал:
Ако използвате подсказката 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 г.
Това може да стане по-елегантно с клаузата OUTPUT, ако имате нужда от SELECT и UPDATE наведнъж.