NOLOCK
se nevztahuje na část dotazu, která odkazuje na tabulku, která má být upravena. V příkazech aktualizace SQL Serveru krátce uzamkněte každý řádek, když je testován. Toto je mechanismus vyhýbání se uváznutí. Zabraňuje více aktualizacím každého S-lock řádku pro čtení a poté se pokusí jej X-uzamknout.
Nemůžete nechat U-zámky zmizet AFAIK. Ale můžete snížit počet řádků uzamčených ve tvaru písmene U na úplné minimum vlastním spojením:
update t1
set ...
from T t1 with (rowlock)
where t1.ID in (select TOP 5 ID from T t2 with (nolock) where ... order by ...)
To zvyšuje trochu režie, ale umožňuje vám to použít NOLOCK
ke čtení.
Zvažte použití izolace snímků pro čtení. NOLOCK
má určité problémy, jako jsou dotazy, které se náhodně přerušují.