Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Pessimistische Sperre in T-SQL

Wenn Sie auf eine andere Ressource wie einen Endbenutzer warten, befolgen Sie den Rat von Dave Markle und tun Sie es nicht.

Versuchen Sie andernfalls den folgenden T-SQL-Code:

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

Der HOLDLOCK hint bittet SQL Server höflich, die Sperre zu halten, bis Sie die Transaktion festschreiben. Das ROWLOCK hint bittet SQL Server höflich, nur diese Zeile zu sperren, anstatt eine Seiten- oder Tabellensperre zu erteilen.

Beachten Sie, dass, wenn viele Zeilen betroffen sind, entweder SQL Server die Initiative ergreift und zu Seitensperren eskaliert, oder Sie haben eine ganze Armee von Zeilensperren, die den Speicher Ihres Servers füllen und die Verarbeitung verlangsamen.