Delen via


APPLOCK_TEST (Transact-SQL)

van toepassing op:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceSQL-database in Microsoft Fabric

Deze functie geeft informatie terug over de vraag of een slot kan worden toegekend op een bepaalde applicatiebron, voor een gespecificeerde lock-eigenaar, zonder het slot te verkrijgen. Als applicatievergrendelingsfunctie werkt APPLOCK_TEST op de huidige database. De database is het bereik van de applicatievergrendelingen.

Transact-SQL syntaxis-conventies

Syntaxis

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

Arguments

'database_principal'
De gebruiker-, rol- of applicatierol die rechten kan krijgen voor objecten in de database. Om de functie succesvol aan te roepen, moet de functieaanroeper lid zijn van database_principal, dbo of de db_owner vaste databaserol.

'resource_name'
Een naam van de lockresource die door de clientapplicatie wordt gespecificeerd. De applicatie moet zorgen voor een unieke naam van de bron. De opgegeven naam wordt intern gehasht naar een waarde die de SQL Server lock manager intern kan opslaan. resource_nameis nvarchar(255), zonder standaard. resource_name is binair vergeleken en is hoofdlettergevoelig ongeacht de collatie-instellingen van de huidige database.

'lock_mode'
De lock-modus om een specifieke bron te verkrijgen. lock_mode is nvarchar(32), zonder standaardwaarde. lock_mode kunt een van deze waarden hebben: Gedeeld,Update, IntentGedeeld, IntentExclusive, Exclusive.

'lock_owner'
De eigenaar van het slot, wat de lock_owner waarde was toen het slot werd aangevraagd. lock_owner is nvarchar(32), en de waarde kan zowel Transactie (de standaard) als Sessie zijn. Als default of Transaction expliciet is gespecificeerd, moet APPLOCK_TEST vanuit een transactie worden uitgevoerd.

Retourtypen

smallint

Retourwaarde

0 als het slot niet aan de opgegeven eigenaar kan worden toegekend, of 1 als het slot kan worden toegekend.

Functie-eigenschappen

Niet-deterministisch

Niet-indexeerbaar

Niet-paralleliseerbaar

Voorbeelden

Twee gebruikers (gebruiker A en gebruiker B), met aparte sessies, voeren de volgende reeks van Transact-SQL instructies uit.

Gebruiker A voert:

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  

Gebruiker B voert vervolgens uit:

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  

Gebruiker A voert vervolgens uit:

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

Gebruiker B voert vervolgens uit:

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

Gebruiker A en Gebruiker B voeren dan allebei uit:

COMMIT TRAN;  
GO  

Zie ook

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