Not
Åtkomst till denna sida kräver auktorisation. Du kan prova att logga in eller byta katalog.
Åtkomst till denna sida kräver auktorisation. Du kan prova att byta katalog.
Gäller för:SQL Server
Azure SQL Database
Azure SQL Managed Instance
SQL-databas i Microsoft Fabric
Denna funktion returnerar information om huruvida ett lås kan beviljas på en viss applikationsresurs, för en specificerad låsägare, utan att låset förvärvas. Som en applikationslåsfunktion fungerar APPLOCK_TEST på den aktuella databasen. Databasen är omfattningen av applikationslåsen.
Transact-SQL syntaxkonventioner
Syntax
APPLOCK_TEST ( 'database_principal' , 'resource_name' , 'lock_mode' , '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_mode'
Låsläget för att få tag på en specifik resurs.
lock_mode är nvarchar(32), utan standardvärde.
lock_mode kan ha någon av dessa värden: Delat, Uppdaterat, AvsiktDelat,AvsiktExklusivt, Exklusivt.
'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. Om default eller Transaction är uttryckligen specificerad måste APPLOCK_TEST utföras inifrån en transaktion.
Returtyper
smallint
Returvärde
0 om låset inte kan ges till den angivna ägaren, eller 1 om låset kan beviljas.
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 då båda:
COMMIT TRAN;
GO
Se även
APPLOCK_MODE (Transact-SQL)
sp_getapplock (Transact-SQL)
sp_releaseapplock (Transact-SQL)