Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Verrou pessimiste dans T-SQL

Si vous attendez une autre ressource, comme un utilisateur final, suivez les conseils de Dave Markle et ne le faites pas.

Sinon, essayez le code T-SQL suivant :

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

Le HOLDLOCK hint demande poliment à SQL Server de maintenir le verrou jusqu'à ce que vous validiez la transaction. Le ROWLOCK hint demande poliment à SQL Server de ne verrouiller que cette ligne plutôt que d'émettre un verrou de page ou de table.

Sachez que si de nombreuses lignes sont affectées, soit SQL Server prendra l'initiative et passera aux verrous de page, soit vous aurez toute une armée de verrous de ligne remplissant la mémoire de votre serveur et ralentissant le traitement.