Partilhar via


APPLOCK_MODE (Transact-SQL)

Aplica-se a:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceBase de dados SQL no Microsoft Fabric

Esta função devolve o modo de bloqueio mantido pelo proprietário do bloqueio num determinado recurso de aplicação. Como função de bloqueio de aplicação, APPLOCK_MODE opera na base de dados atual. A base de dados é o âmbito dos bloqueios de aplicação.

Transact-SQL convenções de sintaxe

Sintaxe

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

Arguments

'database_principal'
O utilizador, papel ou função de aplicação que pode receber permissões para objetos na base de dados. Para chamar com sucesso a função, o chamador de função deve ser membro de database_principal, DBO ou do papel de base de dados fixo db_owner.

'resource_name'
Um nome de recurso de bloqueio especificado pela aplicação cliente. A aplicação deve garantir um nome de recurso único. O nome especificado é inserido internamente num valor que o gestor de bloqueios do SQL Server pode armazenar internamente. resource_nameé nvarchar(255), sem padrão. resource_name é binária comparada e é sensível a maiúsculas minúsculas independentemente das definições de colação da base de dados atual.

'lock_owner'
O proprietário da fechadura, que é o valor lock_owner quando a fechadura foi solicitada. lock_owner é nvarchar(32), e o valor pode ser Transação (o padrão) ou Sessão.

Tipos de devolução

nvarchar(32)

Valor de retorno

Devolve o modo de bloqueio mantido pelo proprietário do bloqueio num determinado recurso de aplicação. O modo de bloqueio pode ter qualquer um destes valores:

NoLock
Update
*IntençãoPartilhadaExclusiva

IntençãoPartilhada
IntentExclusivo
*IntençãoExclusivo da Atualização

compartilhada
Exclusivo

*Este modo de bloqueio é uma combinação de outros modos de bloqueio e sp_getapplock não pode adquiri-lo explicitamente.

Propriedades da função

Não determinístico

Não indexável

Não paralelizável

Examples

Dois utilizadores (Utilizador A e Utilizador B), com sessões separadas, executam a seguinte sequência de instruções Transact-SQL.

O Utilizador A executa:

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  

O Utilizador B executa então:

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  

O Utilizador A então executa:

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

O Utilizador B executa então:

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

O Utilizador A e o Utilizador B executam então:

COMMIT TRAN;  
GO  

Consulte também

APPLOCK_TEST (Transact-SQL)
sp_getapplock (Transact-SQL)
sp_releaseapplock (Transact-SQL)