Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Blocco pessimistico in T-SQL

Se stai aspettando un'altra risorsa come un utente finale, segui il consiglio di Dave Markle e non farlo.

Altrimenti, prova il seguente codice 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

Il HOLDLOCK hint chiede cortesemente a SQL Server di mantenere il blocco finché non si esegue il commit della transazione. Il ROWLOCK hint chiede cortesemente a SQL Server di bloccare solo questa riga anziché emettere un blocco di pagina o tabella.

Tieni presente che se molte righe sono interessate, o SQL Server prenderà l'iniziativa e passerà ai blocchi di pagina, oppure avrai un intero esercito di blocchi di righe che riempiono la memoria del tuo server e impantanano l'elaborazione.