Anda bisa mendapatkan kondisi balapan.
Itu dapat dilakukan dalam satu pernyataan:
- Anda dapat menetapkan dalam UPDATE
- Petunjuk kunci memungkinkan proses lain untuk melewati baris ini
- Klausa OUTPUT mengembalikan data ke pemanggil
Coba ini... (edit:holdlock dihapus)
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
Jika tidak, Anda mungkin memerlukan pilihan terpisah
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 ...
Silakan lihat ini untuk lebih lanjut:SQL Server Process Queue Race Condition