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

PERBARUI + DENGAN (ROWLOCK) + CTE

NOLOCK tidak berlaku untuk bagian kueri yang mereferensikan tabel yang akan dimodifikasi. Dalam pernyataan pembaruan SQL Server, U-lock setiap baris secara singkat saat sedang diuji. Ini adalah mekanisme penghindaran kebuntuan. Ini mencegah beberapa pembaruan untuk setiap S-lock satu baris untuk membaca dan kemudian mencoba untuk X-lock.

Anda tidak dapat membuat kunci-U lepas AFAIK. Tetapi Anda dapat mengurangi jumlah baris yang dikunci-U menjadi minimum mutlak dengan bergabung sendiri:

update t1
set ...
from T t1 with (rowlock)
where t1.ID in (select TOP 5 ID from T t2 with (nolock) where ... order by ...)

Ini menambahkan sedikit overhead tetapi memungkinkan Anda untuk menggunakan NOLOCK untuk membaca.

Pertimbangkan untuk menggunakan isolasi snapshot untuk pembacaan. NOLOCK memiliki masalah tertentu seperti kueri yang dibatalkan secara acak.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cara menjalankan prosedur tersimpan beberapa kali

  2. Bagaimana saya bisa menggabungkan beberapa baris ke dalam daftar yang dipisahkan koma di SQL Server 2005?

  3. Konversi nilai teks di SQL Server dari UTF8 ke ISO 8859-1

  4. Sisipkan Masalah Konkurensi - Lingkungan Multithreaded

  5. Bagaimana mengatasi Pernyataan tidak mengembalikan kesalahan set hasil?