Sie könnten eine Race-Condition bekommen.
Dies kann in einer Anweisung erfolgen:
- Sie können in einem UPDATE zuweisen
- Die Sperrhinweise erlauben es einem anderen Prozess, zu überspringen diese Zeile
- Die OUTPUT-Klausel gibt Daten an den Aufrufer zurück
Versuchen Sie Folgendes ... (Bearbeiten:Holdlock entfernt)
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
Wenn nicht, benötigen Sie möglicherweise eine separate Auswahl
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 ...
Weitere Informationen finden Sie hier:SQL Server Process Queue Race Condition