Freigeben über


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. Die Datenbank umfasst den Bereich der Anwendungssperren.

Gilt für: SQL Server (SQL Server 2008 bis aktuelle Version), Windows Azure SQL-Datenbank (Ursprüngliche Version bis aktuelle Version).

Themenlink (Symbol) Transact-SQL-Syntaxkonventionen

Syntax

APPLOCK_TEST ( 'database_principal' , 'resource_name' , 'lock_mode' , '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 Sperrenressource, der von der Clientanwendung angegeben wird. In der Anwendung muss sichergestellt sein, dass die Ressource 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_mode '
    Der Sperrmodus, der für eine bestimmte Ressource abgerufen werden soll. lock_mode ist vom Datentyp nvarchar(32) und hat keinen Standardwert. Die folgenden Werte sind möglich: Shared, Update, IntentShared, IntentExclusive und Exclusive.

  • ' 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 sein. Wird der Standard 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 Sequenz von Transact-SQL-Anweisungen aus.

Benutzer 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

Benutzer B führt dann 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

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

Siehe auch

Verweis

APPLOCK_MODE (Transact-SQL)

sp_getapplock (Transact-SQL)

sp_releaseapplock (Transact-SQL)