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

Cara mengunci baris secara eksklusif yang mencegah operasi CRUD

BEGIN TRAN

    SELECT 1
    FROM Table
    WITH (XLOCK, ROWLOCK)

COMMIT TRAN

Itu akan berhasil.

EDIT

Seperti yang dicatat oleh orang lain, Anda tidak dapat mengunci baris agar tidak dibaca . Satu-satunya cara yang saya tahu untuk melakukan ini adalah sebagai berikut:

WITH (UPDLOCK, TABLOCK)

Dan ini mengasumsikan bahwa WITH (NOLOCK) tidak pernah digunakan dalam pernyataan SELECT (yang harus dihindari).

Saya menguji ini dan itu akan berhasil, meskipun TABLOCK hanya boleh digunakan dalam kasus-kasus ekstrem. Tentu saja jika konkurensi diperlukan, itu adalah solusi yang buruk dan beberapa bentuk penguncian lainnya akan diperlukan. Salah satu caranya adalah dengan memperbarui kolom bit "Tersedia Benar/Salah" dan hanya membaca baris di mana Tersedia =Benar. Seperti yang disarankan @gbn, READPAST bisa digunakan dengan ini.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL:Bagaimana cara melacak baris yang sudah cocok dalam subquery yang berkorelasi?

  2. Milidetik di DateTime saya berubah saat disimpan di SQL Server

  3. Dapatkan jumlah hari kerja (Minggu, Senin, Selasa) antara dua tanggal SQL

  4. 3 Alasan Teratas Orang Pindah ke SaaS

  5. Pemilihan Prosesor Praktis untuk Beban Kerja OLTP SQL Server 2014/2016