Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

É possível forçar o bloqueio de nível de linha no SQL Server?


Você pode usar a dica ROWLOCK, mas o AFAIK SQL pode decidir escalá-la se estiver com poucos recursos

Do doco:

ROWLOCK Especifica que os bloqueios de linha são feitos quando os bloqueios de página ou tabela são feitos normalmente. Quando as transações especificadas operam no nível de isolamento SNAPSHOT, os bloqueios de linha não são executados, a menos que ROWLOCK seja combinado com outras dicas de tabela que exijam bloqueios, como UPDLOCK e HOLDLOCK.

e

Dicas de bloqueio ROWLOCK, UPDLOCK E XLOCK que adquirem bloqueios em nível de linha podem colocar bloqueios em chaves de índice em vez de nas linhas de dados reais. Por exemplo, se uma tabela tiver um índice não clusterizado e uma instrução SELECT usando uma dica de bloqueio for manipulada por um índice de cobertura, um bloqueio será adquirido na chave de índice no índice de cobertura em vez de na linha de dados na tabela base.

E, finalmente, isso fornece uma explicação bastante detalhada sobre o escalonamento de bloqueio no SQL Server 2005, que foi alterado no SQL Server 2008.

Há também, muito em profundidade:Bloqueando o Mecanismo de Banco de Dados (em livros online)

Então, em geral
UPDATE
Employees WITH (ROWLOCK)
SET Name='Mr Bean'
WHERE Age>93

Deve estar ok, mas dependendo dos índices e da carga no servidor, pode acabar aumentando para um bloqueio de página.