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

Bloqueio pessimista no T-SQL


Se você estiver esperando por outro recurso, como um usuário final, siga o conselho de Dave Markle e não faça isso.

Caso contrário, tente o seguinte código T-SQL:
BEGIN TRAN

SELECT *
FROM   authors AU
WITH   (HOLDLOCK, ROWLOCK)
WHERE  AU.au_id = '274-80-9391'

/* Do all your stuff here while the row is locked */

COMMIT TRAN

O HOLDLOCK dica educadamente pede ao SQL Server para manter o bloqueio até que você confirme a transação. O ROWLOCK dica educadamente pede ao SQL Server para bloquear apenas esta linha em vez de emitir um bloqueio de página ou tabela.

Esteja ciente de que, se muitas linhas forem afetadas, o SQL Server tomará a iniciativa e escalará para bloqueios de página ou você terá um exército inteiro de bloqueios de linha preenchendo a memória do servidor e atrapalhando o processamento.