APPLOCK_TEST (Transact-SQL)

Gilt für:SQL ServerAzure SQL-DatenbankAzure SQL Managed Instance

Diese Funktion 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 Anwendungssperrfunktion, die für die aktuelle Datenbank gilt. Die Datenbank umfasst den Bereich der Anwendungssperren.

Transact-SQL-Syntaxkonventionen

Syntax

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

Hinweis

Informationen zum Anzeigen der Transact-SQL-Syntax für SQL Server 2014 (12.x) und früher finden Sie unter Dokumentation zu früheren Versionen.

Argumente

'database_principal'
Der Benutzer, die Rolle oder die Anwendungsrolle, dem bzw. der Berechtigungen für Objekte in einer Datenbank erteilt werden können. Um eine Funktion erfolgreich aufzurufen, 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 codiert, der intern im SQL Server-Sperren-Manager gespeichert werden kann. resource_name ist vom Datentyp nvarchar(255) und besitzt 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 abzurufende Sperrmodus für eine spezifische Ressource. lock_mode ist vom Datentyp nvarchar(32) und verfügt nicht über einen Standardwert. lock_mode kann folgende Werte aufweisen: 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 Transaktion (Standard) oder Sitzung entsprechen. Wird der Standard oder Transaction explizit angegeben, muss APPLOCK_TEST aus einer Transaktion heraus ausgeführt werden.

Rückgabetypen

smallint

Rückgabewert

0 (null), wenn die Sperre dem angegebenen Besitzer nicht erteilt werden kann. Wenn die Sperre erteilt werden kann, wird 1 zurückgegeben.

Funktionseigenschaften

Nicht deterministisch

Nonindexable

Nonparallelizable

Beispiele

Zwei Benutzer*innen (Benutzer*in A und Benutzer*in B) führen in getrennten Sitzungen folgende Sequenz von Transact-SQL-Anweisungen aus.

Benutzer A führt Folgendes aus:

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

Weitere Informationen

APPLOCK_MODE (Transact-SQL)
sp_getapplock (Transact-SQL)
sp_releaseapplock (Transact-SQL)