Not
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Gäller för:SQL Server
Azure SQL Database
Azure SQL Managed Instance
SQL-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)