SQL Server File d'attente des Processus Condition de Course

J'ai un ordre de la file d'attente qui est accessible par plusieurs processeurs moyen d'une procédure stockée. Chaque processeur passe dans un ID unique qui est utilisé pour verrouiller les 20 prochaines commandes pour son propre usage. La procédure stockée renvoie alors ces dossiers à l'ordre du processeur à l'ordre du jour.

Il y a des cas où plusieurs processeurs sont en mesure de récupérer la même " OrderTable de l'enregistrement de à quel point ils essayent de les opérer sur elle. Cette situation entraîne des erreurs en cours de levée plus tard dans le processus.

Mon prochain cours de l'action est de permettre à chaque processeur de saisir toutes les commandes disponibles et tout autour de robin des processeurs, mais j'espérais tout simplement faire de cette section de code thread-safe et permettre aux établissements de transformation de saisir des enregistrements à chaque fois que qu'ils aiment.

De façon Explicite - une idée de pourquoi je suis en train de vivre cette "race condition" et comment je peux résoudre le problème.

BEGIN TRAN
    UPDATE  OrderTable WITH ( ROWLOCK )
    SET     ProcessorID = @PROCID
    WHERE   OrderID IN ( SELECT TOP ( 20 )
                                        OrderID
                                FROM    OrderTable WITH ( ROWLOCK )
                                WHERE   ProcessorID = 0)
COMMIT TRAN


SELECT  OrderID, ProcessorID, etc...
FROM    OrderTable
WHERE   ProcessorID = @PROCID