NOLOCK
gäller inte den del av frågan som refererar till tabellen som ska ändras. I SQL Server-uppdateringssatser U-låser varje rad kort medan den testas. Detta är en mekanism för att undvika dödläge. Det förhindrar flera uppdateringar av varje S-lås en rad för läsning och försök sedan att X-låsa den.
Du kan inte få U-låsen att försvinna AFAIK. Men du kan minska antalet U-låsta rader till det absoluta minimum genom att själv gå med:
update t1
set ...
from T t1 with (rowlock)
where t1.ID in (select TOP 5 ID from T t2 with (nolock) where ... order by ...)
Detta lägger till lite overhead men det låter dig använda NOLOCK
för läsning.
Överväg att använda ögonblicksbildsisolering för läsningarna. NOLOCK
har vissa problem som slumpmässigt avbrytande frågor.