Partage via


APPLOCK_TEST (Transact-SQL)

S’applique à : SQL Server Azure SQL Database Azure SQL Managed Instance

Cette fonction retourne des informations indiquant si un verrou peut ou non être octroyé sur une ressource d'application à un propriétaire de verrou donné, sans acquisition du verrou. En tant que fonction de verrouillage d'application, APPLOCK_TEST agit sur la base de données active. La base de données constitue l'étendue des verrous d'application.

Conventions de la syntaxe Transact-SQL

Syntaxe

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

Arguments

' database_principal '
Utilisateur, rôle ou rôle d’application qui peuvent se voir octroyer des autorisations sur des objets dans la base de données. Pour pouvoir appeler la fonction, l’appelant de la fonction doit être membre du rôle de base de données fixe database_principal, dbo ou db_owner.

' resource_name '
Nom de ressource de verrouillage spécifié par l'application cliente. L'application doit garantir un nom de ressource unique. Le nom spécifié est haché en interne en une valeur que le gestionnaire de verrous SQL Server peut stocker en interne. resource_name est de type nvarchar(255), sans valeur par défaut. L’argument resource_name est évalué en binaire et respecte la casse, quels que soient les paramètres de classement de la base de données active.

' lock_mode '
Mode de verrouillage à obtenir pour une ressource spécifique. L’argument lock_mode est de type nvarchar(32) et n’a pas de valeur par défaut. La valeur de l’argument lock_mode peut être l’une des suivantes : Shared, Update, IntentShared, IntentExclusive, Exclusive.

' lock_owner '
Propriétaire du verrou, correspondant à la valeur lock_owner lorsque le verrou a été demandé. lock_owner est de type nvarchar(32) et sa valeur peut être Transaction (valeur par défaut) ou Session. Si la valeur par défaut ou Transaction est explicitement spécifiée, la fonction APPLOCK_TEST doit être exécutée à partir d’une transaction.

Types de retour

smallint

Valeur retournée

0 si le verrou ne peut pas être octroyé au propriétaire spécifié ou 1 si le verrou peut être octroyé.

Propriétés de la fonction

Non déterministe

Non indexable

Non parallélisable

Exemples

Deux utilisateurs (Utilisateur A et Utilisateur B) exécutent la séquence d’instructions Transact-SQL suivante dans des sessions différentes.

Utilisateur A exécute :

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  

Utilisateur B exécute ensuite :

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  

Utilisateur A exécute ensuite :

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

Utilisateur B exécute ensuite :

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

Les deux utilisateurs, Utilisateur A et Utilisateur B, exécutent ensuite :

COMMIT TRAN;  
GO  

Voir aussi

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