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

Dapatkan Kunci Tabel Pembaruan di awal Prosedur Tersimpan di SQL Server

Anda mengatakan:

Anda hanya memerlukan kunci baca bersama selama TXN. Ini berarti tidak ada proses lain yang bisa mendapatkan kunci "tulis", dalam hubungannya dengan TABLOCK. Dan Anda juga tidak perlu COUNT.

...
   BEGIN TRANSANCTION
     SELECT TOP 1 KeyCol FROM TheTable WITH (TABLOCK, HOLDLOCK)
...

Menurut Anda, mengapa Anda menginginkan KUNCI PEMBARUAN?

HOLDLOCK atau SERIALIZABLE

Edit, setelah komentar:

  • "kunci eksklusif" berarti "hanya satu proses yang menggunakan data".
  • "SERIALIZABLE" pada dasarnya berarti menahan kunci (bersama, eksklusif, apa pun) lebih lama.

Anda tidak dapat menentukan "kunci eksklusif" dan memungkinkan proses lain untuk membaca. Konsep-konsepnya saling eksklusif. Anda ingin mencegah penulisan ke seluruh tabel, yang bertahan kunci bersama/baca akan berhasil. Di sinilah SERIALIZABLE masuk.

Dari "Mode Kunci"

Jadi:kunci bersama melarang penulisan dan dapat dibuat bertahan dengan membuatnya SERIALIZABLE



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Mengapa ekspresi CASE saya non-deterministik?

  2. Peringatan:Nilai nol dihilangkan dengan operasi SET agregat atau lainnya di Aqua Data Studio

  3. pesan oleh newid() - bagaimana cara kerjanya?

  4. SQL Server:Rethrow pengecualian dengan nomor pengecualian asli

  5. Bagaimana cara membatalkan kueri UPDATE SQL Server?