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 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)