Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Apakah prosedur tersimpan mengunci tabel/baris?

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




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Panggilan Prosedur Jarak Jauh gagal dengan sql server 2008 R2

  2. Perbaiki "SQL Server memblokir akses ke PERNYATAAN 'OpenRowset/OpenDatasource' dari komponen 'Kueri Terdistribusi Ad Hoc"

  3. Bagaimana saya bisa menampilkan gambar dari SQL Server menggunakan ASP.NET?

  4. Menghubungkan ke server SQL dari komputer lain

  5. SqlCommand.ExecuteScalar Cancel