Usar SQL Server como una cola de base de datos con varios clientes

Dada una tabla que actúa como una cola, ¿cómo puedo configurar mejor la tabla / consultas para que varios clientes procesen simultáneamente desde la cola?

Por ejemplo, la siguiente tabla indica un comando que un trabajador debe procesar. Cuando el trabajador haya terminado, establecerá el valor procesado en verdadero.

| ID | COMMAND | PROCESSED |
|  1 | ...     | true      |
|  2 | ...     | false     |
|  3 | ...     | false     |

Los clientes pueden obtener un comando para trabajar así:

select top 1 COMMAND 
from EXAMPLE_TABLE 
with (UPDLOCK, ROWLOCK) 
where PROCESSED=false;

Sin embargo, si hay varios trabajadores, cada uno intenta obtener la fila con ID = 2. Solo el primero obtendrá el bloqueo pesimista, el resto esperará. Entonces uno de ellos obtendrá la fila 3, etc.

¿Qué consulta / configuración permitiría a cada cliente trabajador obtener una fila diferente cada uno y trabajar en ellos simultáneamente?

EDITAR:

Varias respuestas sugieren variaciones sobre el uso de la tabla en sí para registrar un estado en proceso. Pensé que esto no sería posible dentro de una sola transacción. (es decir, ¿qué sentido tiene actualizar el estado si ningún otro trabajador lo verá hasta que se confirme el txn?) Quizás la sugerencia sea:

# start transaction
update to 'processing'
# end transaction
# start transaction
process the command
update to 'processed'
# end transaction

¿Es esta la forma en que las personas suelen abordar este problema? Me parece que el problema sería mejor manejado por el DB, si es posible.

Respuestas a la pregunta(7)

Su respuesta a la pregunta