APPLOCK_MODE (Transact-SQL)
S’applique à : SQL Server Azure SQL Database Azure SQL Managed Instance
Cette fonction retourne le mode de verrouillage détenu par le propriétaire du verrou sur une ressource d’application particulière. En tant que fonction de verrouillage d'application, APPLOCK_MODE 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_MODE( 'database_principal' , 'resource_name' , '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_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.
Types de retour
nvarchar(32)
Valeur retournée
Renvoie le mode de verrouillage détenu par le propriétaire du verrou sur une ressource d'application particulière. Le mode de verrouillage peut avoir une des valeurs suivantes :
NoLock
Mettre à jour
*SharedIntentExclusive
IntentShared
IntentExclusive
*UpdateIntentExclusive
Partagé
Exclusif
*Ce mode de verrouillage est une combinaison d'autres modes de verrouillage et sp_getapplock ne peut pas l'acquérir explicitement.
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
L'utilisateur B exécute :
SELECT APPLOCK_TEST('public', 'Form1', 'Exclusive', 'Transaction');
--Result set: '1' (The lock is grantable.)
GO
Les utilisateurs A et B exécutent ensuite :
COMMIT TRAN;
GO
Voir aussi
APPLOCK_TEST (Transact-SQL)
sp_getapplock (Transact-SQL)
sp_releaseapplock (Transact-SQL)