Editar:
Busqué en Google para verificar mi respuesta:"Procesamiento de colas de datos en SQL Server con READPAST y UPDLOCK". Han pasado años desde que leí y jugué con esta solución.
Originales:
Si usa la sugerencia READPAST, las filas bloqueadas se omiten. Ha utilizado ROWLOCK, por lo que debe evitar la escalada de bloqueo. También necesitas UPDLOCK, como descubrí.
Entonces, el proceso 1 bloquea 20 filas, el proceso 2 tomará las siguientes 20, el proceso 3 tomará las filas 41 a 60, etc.
La actualización también se puede escribir así:
UPDATE TOP (20)
foo
SET
ProcessorID = @PROCID
FROM
OrderTable foo WITH (ROWLOCK, READPAST, UPDLOCK)
WHERE
ProcessorID = 0
Actualizar, octubre de 2011
Esto se puede hacer de manera más elegante con la cláusula OUTPUT si necesita SELECCIONAR y ACTUALIZAR de una sola vez.