NOLOCK
ne s'applique pas à la partie de la requête qui référence la table à modifier. Dans les instructions de mise à jour de SQL Server, verrouillez brièvement chaque ligne pendant qu'elle est testée. Il s'agit d'un mécanisme d'évitement de blocage. Il empêche plusieurs mises à jour de chaque S-lock d'une ligne pour la lecture, puis essaie de le verrouiller en X.
Vous ne pouvez pas faire disparaître les antivols en U AFAIK. Mais vous pouvez réduire le nombre de lignes verrouillées en U au minimum absolu en les rejoignant elles-mêmes :
update t1
set ...
from T t1 with (rowlock)
where t1.ID in (select TOP 5 ID from T t2 with (nolock) where ... order by ...)
Cela ajoute un peu de surcharge mais cela vous permet d'utiliser NOLOCK
pour la lecture.
Envisagez d'utiliser l'isolement d'instantané pour les lectures. NOLOCK
a certains problèmes tels que des requêtes abandonnées de manière aléatoire.