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.
Syntax
APPLOCK_TEST ( 'database_principal' , 'resource_name' , 'lock_mode' , 'lock_owner' )
Argumente
'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. In der Anwendung muss sichergestellt sein, dass die Ressource 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 vom Datentyp nvarchar(32) und weist keinen Standardwert auf. Folgende Werte sind möglich: Shared, Update, IntentShared, IntentExclusive, Exclusive.'lock_owner'
Der Besitzer 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 lauten. Wird der Standardwert oder Transaction explizit angegeben, muss APPLOCK_TEST aus einer Transaktion heraus ausgeführt werden.
Rückgabetypen
smallint
Rückgabewert
Gibt 0 zurück, wenn die Sperre dem angegebenen Besitzer nicht erteilt werden kann. Wenn die Sperre erteilt werden kann, wird 1 zurückgegeben.
Funktionseigenschaften
Nondeterministic
Nonindexable
Nonparallelizable
Beispiele
Im folgenden Beispiel führen zwei Benutzer (Benutzer A und Benutzer B) in getrennten Sitzungen die folgende Abfolge von Transact-SQL-Anweisungen aus.
Benutzer A führt Folgendes aus:
USE AdventureWorks2008R2;
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 AdventureWorks2008R2;
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