Vous pourriez obtenir une condition de concurrence.
Cela peut être fait en une seule déclaration :
- Vous pouvez attribuer dans une MISE À JOUR
- Les indications de verrouillage permettent à un autre processus de sauter cette ligne
- La clause OUTPUT renvoie des données à l'appelant
Essayez ceci... (edit :holdlock supprimé)
Update TOP (1) ServerLoginUsers WITH (ROWLOCK, READPAST)
OUTPUT INSERTED.*
SET
AssignedTo = @User, AssignedToDate = getdate(), SourcePool = @UserPool
WHERE
AssignedTo is null and [TsServer] = @Server -- not needed -> and UserName = @ServerUser
Sinon, vous aurez peut-être besoin d'une sélection séparée
Update TOP (1) ServerLoginUsers WITH (ROWLOCK, READPAST)
SET
-- yes, assign in an update
@ServerUser = UserName,
-- write
AssignedTo = @User, AssignedToDate = getdate(), SourcePool = @UserPool
OUTPUT INSERTED.*
WHERE
AssignedTo is null and [TsServer] = @Server -- not needed -> and UserName = @ServerUser
SELECT ...
Voir ceci s'il vous plaît pour plus :SQL Server Process Queue Race Condition