Вы можете получить условие гонки.
Это можно сделать одним утверждением:
- Вы можете назначить в ОБНОВЛЕНИИ
- Подсказки блокировки позволяют другому процессу пропустить эту строку
- Предложение OUTPUT возвращает данные вызывающей стороне
Попробуйте это ... (редактировать: блокировка снята)
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
Если нет, вам может потребоваться отдельный выбор
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 ...
См., Пожалуйста, больше: Состояние гонки очереди процесса SQL Server