Upravit:
Vygooglil jsem, abych zkontroloval svou odpověď:„Zpracování datových front na serveru SQL pomocí READPAST a UPDLOCK“. Už jsou to roky, co jsem o tomto řešení četl a hrál si s ním.
Originál:
Pokud použijete nápovědu READPAST, budou zamčené řádky přeskočeny. Použili jste ROWLOCK, takže byste se měli vyhnout eskalaci zámku. Potřebujete také UPDLOCK, jak jsem zjistil.
Proces 1 tedy zamkne 20 řádků, proces 2 zabere dalších 20, proces 3 zabere řádky 41 až 60 atd
Aktualizaci lze také napsat takto:
UPDATE TOP (20)
foo
SET
ProcessorID = @PROCID
FROM
OrderTable foo WITH (ROWLOCK, READPAST, UPDLOCK)
WHERE
ProcessorID = 0
Aktualizace, říjen 2011
Toho lze dosáhnout elegantněji pomocí klauzule OUTPUT, pokud potřebujete najednou SELECT a UPDATE.