Du kunne få en race tilstand.
Det kan gøres i én erklæring:
- Du kan tildele i en OPDATERING
- Låsetipene tillader en anden proces at springe over denne række
- OUTPUT-sætningen returnerer data til den, der ringer
Prøv dette... (edit:holdlock fjernet)
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
Hvis ikke, har du muligvis brug for et separat valg
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 ...
Se venligst dette for mere:SQL Server Process Queue Race Condition