Modifica:
Ho cercato su Google per controllare la mia risposta:"Elaborazione delle code di dati in SQL Server con READPAST e UPDLOCK". Sono passati anni da quando ho letto e giocato con questa soluzione.
Originale:
Se si utilizza l'hint READPAST, le righe bloccate vengono ignorate. Hai utilizzato ROWLOCK, quindi dovresti evitare l'escalation del blocco. Hai anche bisogno di UPDLOCK, come ho scoperto.
Quindi il processo 1 blocca 20 righe, il processo 2 prenderà le 20 successive, il processo 3 prenderà le righe da 41 a 60, ecc
L'aggiornamento può anche essere scritto così:
UPDATE TOP (20)
foo
SET
ProcessorID = @PROCID
FROM
OrderTable foo WITH (ROWLOCK, READPAST, UPDLOCK)
WHERE
ProcessorID = 0
Aggiornamento, ottobre 2011
Questo può essere fatto in modo più elegante con la clausola OUTPUT se hai bisogno di SELECT e UPDATE in una volta sola.