Je zou een raceconditie kunnen krijgen.
Het kan in één verklaring worden gedaan:
- U kunt toewijzen in een UPDATE
- Met de vergrendelingshints kan een ander proces overslaan deze rij
- De OUTPUT-component retourneert gegevens naar de beller
Probeer dit... (edit:holdlock verwijderd)
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
Zo niet, dan heeft u mogelijk een aparte selectie nodig
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 ...
Zie dit voor meer informatie:SQL Server Process Queue Race Condition