Nos bancos de dados SQL Server, a dica de consulta WITH (NOLOCK) é ignorada nas tabelas de destino nas instruções UPDATE e DELETE. No entanto, isso também se aplica a tabelas incluídas em uma junção para atualização ou exclusão? Por exemplo, é:
update t
set value1 = 123
FROM mytable t
inner join othertable o with (nolock) on t.id = o.id
equivalente a:
update t
set value1 = 123
FROM mytable t
inner join othertable o on t.id = o.id
Não, não é ignorado. Isso é fácil de testar.
Configurar
Conexão 1
Conexão 2 (enquanto acima ainda está em execução)
O
999
valor não confirmado é usado na atualização, e não100
como teria acontecido sem a dica se estiver executando no RCSI ou sendo bloqueado se estiver executando no nível de isolamento de bloqueio RC.Observe que o
999
valor nunca é realmente confirmado,othertable
portanto, o uso deNOLOCK
aqui significa que o estado persistidomytable
nunca existiu logicamente.