APPLOCK_TEST (Transact-SQL)

Restituisce le informazioni relative alla possibilità o meno di concedere un blocco per una risorsa dell'applicazione specifica a un proprietario di blocchi specifico senza acquisire il blocco stesso. APPLOCK_TEST è una funzione di blocco a livello di applicazione e viene eseguita nel database corrente. L'ambito dei blocchi a livello di applicazione è il database.

Icona di collegamento a un argomento Convenzioni della sintassi Transact-SQL

Sintassi

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

Argomenti

  • ' database_principal '
    Utente, ruolo o ruolo applicazione a cui è possibile concedere autorizzazioni per gli oggetti nel database. Affinché la chiamata della funzione abbia esito positivo, è necessario che il chiamante sia un membro del ruolo predefinito del database database_principal, dbo o db_owner.

  • ' resource_name '
    Nome della risorsa di blocco specificato nell'applicazione client. L'applicazione deve garantire che la risorsa sia univoca. Il nome specificato viene sottoposto internamente ad hashing per creare un valore che è possibile archiviare in Gestione blocchi di SQL Server. resource_name* *è di tipo nvarchar(255) e non prevede alcun valore predefinito. Per resource_name viene eseguito un confronto binario ed è supportata la distinzione tra maiuscole e minuscole, indipendentemente dalle impostazioni delle regole di confronto del database corrente.

  • ' lock_mode '
    Modalità di blocco da acquisire per una particolare risorsa. lock_mode è di tipo nvarchar(32) e non prevede alcun valore predefinito. I possibili valori sono i seguenti: Shared, Update, IntentShared, IntentExclusive, Exclusive.

  • ' lock_owner '
    Proprietario del blocco, ovvero il valore di lock_owner quando è stato richiesto il blocco. lock_owner è di tipo nvarchar(32). Il valore può essere Transaction (impostazione predefinita) oppure Session. Se si specifica in modo esplicito il valore predefinito o Transaction, è necessario eseguire APPLOCK_TEST dall'interno di una transazione.

Tipi restituiti

smallint

Valore restituito

Restituisce 0 se il blocco non può essere concesso al proprietario specificato. In caso contrario restituisce 1.

Funzione Properties

Non deterministica

Nonindexable

Nonparallelizable

Esempi

Nell'esempio seguente due utenti (User A e User B) con sessioni separate eseguono la sequenza di istruzioni Transact-SQL riportata di seguito.

User A esegue:

USE AdventureWorks2012;
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

User B quindi esegue:

Use AdventureWorks2012;
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

User A quindi esegue:

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

User B quindi esegue:

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

User A e User B quindi eseguono entrambi:

COMMIT TRAN;
GO

Vedere anche

Riferimento

APPLOCK_MODE (Transact-SQL)

sp_getapplock (Transact-SQL)

sp_releaseapplock (Transact-SQL)