NOLOCK ou WITH (NOLOCK): Qual a sintaxe correta?


A hint “nolock” permite que o processador do SQL Server não utilize bloqueios (LOCK) durante a leitura de informações, comportamento denominado de leitura suja. Esse é um truque velho e conhecido do SQL Server 2000 e que muitos desenvolvedores tem utilizado. O objetivo desse post é orientar sobre a a sintaxe correta do NOLOCK.

Links relacionados

A palavra ‘WITH’ logo depois o nome da tabela é recomendada, mas opcional:


SELECT * FROM tabela WITH (NOLOCK) — CORRETO


SELECT * FROM tabela (NOLOCK) — CORRETO

Ambos os comandos funcionam com sucesso. Por que então recomendar o uso da palavra opcional ‘WITH’?

 

Motivo 1: A partir do SQL Server 2005, a sintaxe do NOLOCK ficou mais rigorosa. Múltiplas hints funcionam somente com a palavra WITH.


SELECT * FROM tabela (Index=idxSeek, NOLOCK) — NAO FUNCIONA

SELECT * FROM tabela WITH (Index=idxSeek, NOLOCK) CORRETO

.

Motivo 2: E se o desenvolvedor esquecer de colocar os parênteses? Parece piada, mas isso ocorre.


SELECT * FROM tabela NOLOCK — Criamos um alias para a tabela

O comportamento é interessante: a query funciona, mas o NOLOCK é ignorado. As pessoas acham que é um BUG do SQL Server. Na realidade, foi apenas erro de digitação.

Comments (0)