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.