Share via


APPLOCK_MODE (Transact-SQL)

Gibt den Sperrmodus zurück, der vom Besitzer der Sperre für eine bestimmte Anwendungsressource aufrechterhalten wird. APPLOCK_MODE ist eine Anwendungssperrfunktion, die für die aktuelle Datenbank gilt. Die Datenbank umfasst den Bereich der Anwendungssperren.

Themenlink (Symbol) Transact-SQL-Syntaxkonventionen

Syntax

APPLOCK_MODE( 'database_principal' , 'resource_name' , 'lock_owner' )

Argumente

  • 'database_principal'
    Der Benutzer, die Rolle oder die Anwendungsrolle, dem bzw. der Berechtigungen für Objekte in einer Datenbank erteilt werden können. Zum erfolgreichen Aufrufen einer Funktion muss der Aufrufer der Funktion Mitglied einer der folgenden festen Datenbankrollen sein: database_principal, dbo oder db_owner.

  • 'resource_name'
    Der Name einer Sperrressource, der von der Clientanwendung angegeben wird. Die Anwendung muss sicherstellen, dass der Ressourcenname eindeutig ist. Der angegebene Name wird intern als Hashwert in einem Wert gespeichert, der im SQL Server-Sperren-Manager gespeichert werden kann. resource_name* *ist vom Datentyp nvarchar(255) und hat keinen Standardwert. resource_name unterliegt dem Binärvergleich. Daher muss die Groß-/Kleinschreibung unabhängig von den Sortierungseinstellungen der aktuellen Datenbank berücksichtigt werden.

  • 'lock_owner'
    Der Besitzer der Sperre. Dabei handelt es sich um den Wert von lock_owner beim Anfordern der Sperre. lock_owner ist vom Datentyp nvarchar(32). Der Wert kann Transaction (Standard) oder Session lauten.

Rückgabetypen

nvarchar(32)

Rückgabewert

Gibt den Sperrmodus zurück, der vom Besitzer der Sperre für eine bestimmte Anwendungsressource aufrechterhalten wird. Für den Sperrmodus sind die folgenden Werte möglich:

NoLock

Update

*SharedIntentExclusive

IntentShared

IntentExclusive

*UpdateIntentExclusive

Shared

Exclusive

 

*Dieser Sperrmodus ist eine Kombination aus anderen Sperrmodi und kann nicht mithilfe von sp_getapplock explizit aktiviert werden.

Funktionseigenschaften

Nondeterministic

Nonindexable

Nonparallelizable

Beispiele

Zwei Benutzer (User A and User B) führen in getrennten Sitzungen die folgende Sequenz von Transact-SQL-Anweisungen aus.

User A führt Folgendes aus:

USE AdventureWorks2012;
GO
BEGIN TRAN;
DECLARE @result int;
EXEC @result=sp_getapplock
    @DbPrincipal='public',
    @Resource='Form1',
    @LockMode='Shared',
    @LockOwner='Transaction';
SELECT APPLOCK_MODE('public', 'Form1', 'Transaction');
GO

User B führt daraufhin Folgendes aus:

Use AdventureWorks2012;
GO
BEGIN TRAN;
SELECT APPLOCK_MODE('public', 'Form1', 'Transaction');
--Result set: NoLock

SELECT APPLOCK_TEST('public', 'Form1', 'Shared', 'Transaction');
--Result set: 1 (Lock is grantable.)

SELECT APPLOCK_TEST('public', 'Form1', 'Exclusive', 'Transaction');
--Result set: 0 (Lock is not grantable.)
GO

User A führt daraufhin Folgendes aus:

EXEC sp_releaseapplock @Resource='Form1', @DbPrincipal='public';
GO

User B führt daraufhin Folgendes aus:

SELECT APPLOCK_TEST('public', 'Form1', 'Exclusive', 'Transaction');
--Result set: '1' (The lock is grantable.)
GO

User A und User B führen daraufhin Folgendes aus

COMMIT TRAN;
GO

Siehe auch

Verweis

APPLOCK_TEST (Transact-SQL)

sp_getapplock (Transact-SQL)

sp_releaseapplock (Transact-SQL)