Podría obtener una condición de carrera.
Se puede hacer en una declaración:
- Puedes asignar en una ACTUALIZACIÓN
- Las sugerencias de bloqueo permiten que otro proceso omita esta fila
- La cláusula OUTPUT devuelve datos a la persona que llama
Prueba esto... (editar:holdlock eliminado)
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
De lo contrario, es posible que necesite una selección separada
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 ...
Consulte esto para obtener más información:SQL Server Process Queue Race Condition