Delen via


APPLOCK_MODE (Transact-SQL)

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

Deze functie geeft de vergrendelingsmodus terug die door de lock-eigenaar op een bepaalde applicatiebron wordt gebruikt. Als applicatievergrendelingsfunctie werkt APPLOCK_MODE op de huidige database. De database is het bereik van de applicatievergrendelingen.

Transact-SQL syntaxis-conventies

Syntaxis

APPLOCK_MODE( 'database_principal' , 'resource_name' , '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_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.

Retourtypen

nvarchar(32)

Retourwaarde

Geeft de lock-modus terug die door de lock-eigenaar op een bepaalde applicatieresource wordt gehouden. Lock-modus kan een van deze waarden hebben:

NoLock
Update
*GedeeldeIntentieExclusief

IntentGedeeld
IntentExclusief
*UpdateIntentExclusive

gedeelde
Exclusief

*Deze lockmodus is een combinatie van andere lockmodi en sp_getapplock kan deze niet expliciet verkrijgen.

Functie-eigenschappen

Niet-deterministisch

Niet-indexeerbaar

Niet-paralleliseerbaar

Voorbeelden

Twee gebruikers (Gebruiker A en Gebruiker B), met aparte sessies, voeren de volgende reeks Transact-SQL statements 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 vervolgens uit:

COMMIT TRAN;  
GO  

Zie ook

APPLOCK_TEST (Transact-SQL)
sp_getapplock (Transact-SQL)
sp_releaseapplock (Transact-SQL)