Condividi tramite


APPLOCK_MODE (Transact-SQL)

Restituisce la modalità di blocco acquisita dal proprietario del blocco per una particolare risorsa di applicazione. APPLOCK_MODE è una funzione di blocco a livello di applicazione e viene eseguita sul database corrente. L'ambito dei blocchi a livello di applicazione è il database.

Icona di collegamento a un argomentoConvenzioni della sintassi Transact-SQL

Sintassi

APPLOCK_MODE('database_principal','resource_name','lock_owner')

Argomenti

  • 'database_principal'
    Utente, ruolo o ruolo applicazione al quale è possibile assegnare autorizzazioni per gli oggetti del 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 di una risorsa di blocco specificato nell'applicazione client. L'applicazione deve garantire che il nome della risorsa sia univoco. Per il nome specificato viene eseguito internamente l'hashing in un valore che è possibile archiviare in Gestione blocchi di MicrosoftSQL Server. resource_name è di tipo nvarchar(255) e non prevede alcun valore predefinito. Per resource_name viene eseguito un confronto binario ed è quindi supportata la distinzione tra maiuscole e minuscole indipendentemente dalle impostazioni delle regole di confronto del database corrente.

  • 'lock_owner'
    Proprietario del blocco, che corrisponde al valore lock_owner specificato quando è stato richiesto il blocco. lock_owner è di tipo nvarchar(32). I possibili valori sono Transaction (predefinito) e Session.

Tipi restituiti

nvarchar(32)

Valore restituito

Restituisce la modalità di blocco acquisita dal proprietario del blocco per una particolare risorsa di applicazione. I possibili valori della modalità di blocco sono i seguenti:

NoLock

Update

*SharedIntentExclusive

IntentShared

IntentExclusive

*UpdateIntentExclusive

Shared

Exclusive

 

*Questa modalità di blocco risulta dalla combinazione di altre modalità di blocco e non può essere acquisita in modo esplicito tramite sp_getapplock.

Proprietà della funzione

Non deterministica

Non indicizzabile

Non parallelizzabile

Esempi

Si supponga che due utenti, l'utente A e l'utente B, eseguano la sequenza di istruzioni Transact-SQL riportata di seguito in sessioni separate.

L'utente A esegue:

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

L'utente B quindi esegue:

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

L'utente A quindi esegue:

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

L'utente B quindi esegue:

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

Gli utenti A e B quindi eseguono entrambi:

COMMIT TRAN;
GO