APPLOCK_TEST (Transact-SQL)

Gibt Informationen darüber zurück, ob eine Sperre für eine bestimmte Anwendungsressource und einen angegebenen Sperrenbesitzer erteilt werden kann, ohne die Sperre zu aktivieren. APPLOCK_TEST ist eine Funktion für Anwendungssperren und wird in der aktuellen Datenbank ausgeführt. Der Bereich von Anwendungssperren ist die Datenbank.

Themenlink (Symbol) Transact-SQL-Syntaxkonventionen


APPLOCK_TEST ( 'database_principal' , 'resource_name' , 'lock_mode' , 'lock_owner' )

' database_principal '

Ist der Benutzer, die Rolle oder die Anwendungsrolle, dem bzw. der Berechtigungen für Objekte in der 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 Sperrenressource, der von der Clientanwendung angegeben wird. Innerhalb der Anwendung muss sichergestellt sein, dass der Ressourcenname eindeutig ist. Der angegebene Name wird intern in einen Wert hashcodiert, der im Sperren-Manager von SQL Server gespeichert werden kann. resource_nameist ein Wert vom Datentyp nvarchar(255) und weist keinen Standardwert auf. resource_name unterliegt dem Binärvergleich. Daher muss die Groß-/Kleinschreibung unabhängig von den Sortierungseinstellungen der aktuellen Datenbank beachtet werden.

' lock_mode '

Der Sperrmodus, der für eine bestimmte Ressource abgerufen werden soll. lock_mode ist ein Wert vom Datentyp nvarchar(32) und weist keinen Standardwert auf. Die folgenden Werte sind möglich: Shared, Update, IntentShared, IntentExclusive und Exclusive.

' lock_owner '

Der Eigentümer der Sperre. Dabei handelt es sich um den Wert, der beim Anfordern der Sperre mit lock_owner angegeben wird. lock_owner ist ein Wert vom Datentyp nvarchar(32). Der Wert kann Transaction (Standard) oder Session sein. Wird der Standard oder Transaction explizit angegeben, muss APPLOCK_TEST aus einer Transaktion heraus ausgeführt werden.

Gibt 0 zurück, wenn die Sperre dem angegebenen Besitzer nicht erteilt werden kann. Wenn die Sperre erteilt werden kann, wird 1 zurückgegeben.

Nondeterministic

Nonindexable

Nonparallelizable

Im folgenden Beispiel führen zwei Benutzer (Benutzer A und Benutzer B) in getrennten Sitzungen die folgende Sequenz von Transact-SQL-Anweisungen aus.

Benutzer A führt Folgendes aus:

USE AdventureWorks;
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

Benutzer B führt dann Folgendes aus:

Use AdventureWorks;
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

Benutzer A führt dann Folgendes aus:

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

Benutzer B führt dann Folgendes aus:

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

Benutzer A und Benutzer B führen dann Folgendes aus:

COMMIT TRAN;
GO

Community-Beiträge

HINZUFÜGEN
Anzeigen: