Share via


APPLOCK_TEST (Transact-SQL)

Renvoie des informations indiquant si un verrou peut ou non être octroyé sur une ressource d'application à un propriétaire de verrou donné, sans qu'il y ait acquisition du verrou. APPLOCK_TEST est une fonction de verrouillage d'application qui agit sur la base de données active. Le verrou d'application s'applique à la base de données.

Icône Lien de rubriqueConventions de la syntaxe de 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 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 client. L'application doit veiller à ce que la ressource soit unique. Le nom spécifié est haché en interne en une valeur qui peut être stockée dans le gestionnaire de verrous SQL Server. La valeur resource_nameest de type nvarchar(255), sans valeur par défaut. resource_name est évaluée en binaire ; elle est sensible à 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 donnée. lock_mode est de type nvarchar(32), sans valeur par défaut. La valeur peut être l'une des suivantes : Shared, Update, IntentShared, IntentExclusive, Exclusive.

  • 'lock_owner'
    Propriétaire du verrou, ce qui correspond à la valeur de lock_owner au moment où le verrou a été demandé. lock_owner est de type nvarchar(32). La valeur peut être Transaction (par défaut) ou Session. Si la valeur par défaut ou Transaction est explicitement spécifiée, APPLOCK_TEST doit être exécutée à partir d'une transaction.

Types de retour

smallint

Valeur de retour

Renvoie la valeur 0 lorsque le verrou ne peut pas être octroyé au propriétaire spécifié et renvoie la valeur 1 si le verrou peut être attribué.

Propriétés des fonctions

Nondeterministic

Nonindexable

Nonparallelizable

Exemples

Dans l'exemple suivant, deux utilisateurs (A et B) exécutent la suite d'instructions Transact-SQL suivante dans des sessions différentes.

L'utilisateur A exécute :

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

L'utilisateur B exécute ensuite :

Use AdventureWorks2008R2;
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

L'utilisateur A exécute ensuite :

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

L'utilisateur B exécute ensuite :

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