Partager via


APPLOCK_MODE (Transact-SQL)

Renvoie le mode de verrouillage détenu par le propriétaire du verrou sur une ressource d'application particulière. APPLOCK_MODE est une fonction de verrouillage d'application qui agit sur la base de données active. L'étendue des verrous d'application est la base de données.

Icône Lien de rubrique 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 peut se voir octroyer des autorisations sur des objets dans la base de données. L'appelant de la fonction doit être membre du rôle de base de données fixe database_principal, dbo ou db_owner pour pouvoir appeler la fonction.

  • 'resource_name'
    Nom de ressource de verrou spécifié par l'application cliente. L'application doit vérifier que le nom de ressource est unique. Le nom spécifié est haché en interne en une valeur qui peut être stockée dans le gestionnaire de verrous SQL Server. resource_name* *est de type nvarchar(255) et n'a pas de 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, qui est la valeur de lock_owner lorsque le verrou a été demandé. lock_owner est de type nvarchar(32). Sa valeur peut être Transaction (par défaut) ou Session.

Types de retour

nvarchar(32)

Valeur de retour

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

Update

*SharedIntentExclusive

IntentShared

IntentExclusive

*UpdateIntentExclusive

Shared

Exclusive

 

*Ce mode de verrouillage est une combinaison d'autres modes de verrouillage ; il n'est pas possible de l'acquérir explicitement en utilisant sp_getapplock.

Propriétés de la fonction

Nondeterministic

Nonindexable

Nonparallelizable

Exemples

Deux utilisateurs (User A et User B) exécutent la suite d'instructions Transact-SQL suivante dans des sessions différentes.

User A exécute :

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

User B exécute :

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

User A exécute :

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

User B exécute :

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

User A et User B exécutent ensuite :

COMMIT TRAN;
GO

Voir aussi

Référence

APPLOCK_TEST (Transact-SQL)

sp_getapplock (Transact-SQL)

sp_releaseapplock (Transact-SQL)