Megosztás a következőn keresztül:


APPLOCK_TEST (Transact-SQL)

A következőkre vonatkozik:SQL ServerAzure SQL DatabaseFelügyelt Azure SQL-példánySQL-adatbázis a Microsoft Fabricben

Ez a függvény információt ad arról, hogy egy adott alkalmazási erőforráson engedélyezhető-e zár egy meghatározott zártulajdonos számára, anélkül, hogy a zár megszerezné. Alkalmazás-zárolási funkcióként APPLOCK_TEST a jelenlegi adatbázison működik. Az adatbázis az alkalmazászárak hatókörű alakja.

Transact-SQL szintaxis konvenciók

Szemantika

APPLOCK_TEST ( 'database_principal' , 'resource_name' , 'lock_mode' , 'lock_owner' )  

Arguments

'database_principal'
Az a felhasználó, szerep vagy alkalmazás szerep, amely jogosultságot kaphat az adatbázisban lévő objektumokhoz. A függvény sikeres meghívásához a függvényhívónak tagnak kell lennie a database_principal, dbo vagy a db_owner fix adatbázis szerepének.

'resource_name'
Egy kliensalkalmazás által meghatározott zároló erőforrás neve. Az alkalmazásnak egyedi erőforrás nevetet kell biztosítania. A megadott név belső hashelésben van egy olyan értékbe, amelyet az SQL Server zárkezelő bővülten tárolhat. resource_namenvarchar(255), alapértelmezett nélkül. resource_name bináris összehasonlítású, és kis-kisméretre érzékeny, függetlenül a jelenlegi adatbázis összeállítási beállításaitól.

'lock_mode'
A zárolási mód, amit egy adott erőforráshoz lehet szerezni. lock_modenvarchar(32), alapértelmezett érték nélkül. lock_mode bármelyik értéket megkaphatjuk: Megosztott, Frissítés, SzándékMegosztott, SzándékExkluzív, Kizárólagos.

'lock_owner'
A zsilit tulajdonosa, ami a lock_owner érték, amikor a zárat kérték. lock_ownernvarchar(32), és az érték lehet Transaction (az alapértelmezett) vagy Session. Ha az alapértelmezett vagy a tranzakció kifejezetten meg van jelölve, APPLOCK_TEST a tranzakción belül kell végrehajtani.

Visszatérési típusok

smallint

Visszaadott érték

0, ha a zárat nem lehet megadni a megadott tulajdonosnak, vagy 1, ha a zár megadható.

Függvénytulajdonságok

Nem determinisztikus

Nem indexelhető

Nem párhuzamos

Példák

Két felhasználó (A és B felhasználó), külön ülésekkel, a következő Transact-SQL utasítássorozatot futtatják.

Az A felhasználó így fut:

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  

Ezután a B felhasználó futtatja:

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  

Ezután az A felhasználó a következőket futtatja:

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

Ezután a B felhasználó futtatja:

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

Ezután az A és B felhasználó mindketten futtatják:

COMMIT TRAN;  
GO  

Lásd még

APPLOCK_MODE (Transact-SQL)
sp_getapplock (Transact-SQL)
sp_releaseapplock (Transact-SQL)