APPLOCK_MODE (Transact-SQL)

Gäller för:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceSQL-databas i Microsoft Fabric

Denna funktion returnerar låsläget som låsägaren håller på en viss applikationsresurs. Som en applikationslåsfunktion fungerar APPLOCK_MODE på den aktuella databasen. Databasen är omfattningen av applikationslåsen.

Transact-SQL syntaxkonventioner

Syntax

APPLOCK_MODE( 'database_principal' , 'resource_name' , 'lock_owner' )  

Arguments

'database_principal'
Användaren, rollen eller applikationsrollen som kan ges behörigheter till objekt i databasen. För att framgångsrikt anropa funktionen måste funktionsanroparen vara medlem i database_principal, dbo eller den db_owner fasta databasrollen.

'resource_name'
Ett låsresursnamn som specificeras av klientapplikationen. Applikationen måste säkerställa ett unikt resursnamn. Det angivna namnet hashas internt till ett värde som SQL Server-låshanteraren kan lagra internt. resource_nameär nvarchar(255), utan standard. resource_name är binärjämförd och är kasuskänslig oavsett sorteringsinställningarna i den aktuella databasen.

'lock_owner'
Ägaren till låset, vilket är det lock_owner värdet när låset begärdes. lock_owner är nvarchar(32), och värdet kan vara antingen Transaktion (standard) eller Session.

Returtyper

nvarchar(32)

Returvärde

Returnerar låsläget som låsägaren håller på en viss applikationsresurs. Låsläge kan ha något av dessa värden:

NoLock
Update
*DeladAvsiktExklusiv

AvsiktDelad
AvsiktExklusiv
*UpdateIntentExclusive

delad
Exklusiv

*Detta låsläge är en kombination av andra låslägen och sp_getapplock kan inte explicit skaffa det.

Funktionsegenskaper

Icke-deterministisk

Icke-indexerbar

Icke-parallelliserbar

Examples

Två användare (Användare A och Användare B), med separata sessioner, kör följande sekvens av Transact-SQL satser.

Användare A kör:

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  

Användare B kör sedan:

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  

Användare A kör sedan:

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

Användare B kör sedan:

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

Användare A och Användare B kör sedan:

COMMIT TRAN;  
GO  

Se även

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