Możesz dostać warunki wyścigowe.
Można to zrobić w jednym oświadczeniu:
- Możesz przypisać w UPDATE
- Wskazówki dotyczące blokowania umożliwiają innemu procesowi pominięcie ten wiersz
- Klauzula OUTPUT zwraca dane dzwoniącemu
Spróbuj tego... (edycja:blokada usunięta)
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
Jeśli nie, możesz potrzebować osobnego wyboru
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 ...
Zobacz to, aby uzyskać więcej informacji:Warunek wyścigu kolejki procesów SQL Server