APPLOCK_MODE (Transact-SQL)
Aplica-se a: SQL Server Banco de Dados SQL do Azure Instância Gerenciada de SQL do Azure
Essa função retorna o modo de bloqueio mantido pelo proprietário de bloqueio em um determinado recurso de aplicativo. Como uma função de bloqueio de aplicativo, a APPLOCK_MODE opera no banco de dados atual. O banco de dados é o escopo dos bloqueios de aplicativo.
Convenções de sintaxe de Transact-SQL
Sintaxe
APPLOCK_MODE( 'database_principal' , 'resource_name' , 'lock_owner' )
Argumentos
'database_principal'
O usuário, a função ou a função de aplicativo que pode receber permissões para objetos no banco de dados. Para chamar a função com êxito, o chamador da função deve ser membro de database_principal, dbo, ou a função de banco de dados fixa db_owner.
'resource_name'
Um nome de recurso de bloqueio especificado pelo aplicativo cliente. O aplicativo deve garantir um nome do recurso exclusivo. O nome especificado passa internamente por hash, tornando-se um valor que o gerenciador de bloqueio do SQL Server pode armazenar internamente. resource_name é nvarchar(255) , sem nenhum padrão. resource_name é comparado com binário comparado e diferencia maiúsculas de minúsculas, independentemente das configurações de ordenação do banco de dados atual.
'lock_owner'
O proprietário do bloqueio, que é o valor de lock_owner quando o bloqueio foi solicitado. lock_owner é nvarchar(32) e o valor pode ser Transaction (o padrão) ou Session.
Tipos de retorno
nvarchar(32)
Valor retornado
Retorna o modo de bloqueio mantido pelo proprietário de bloqueio em um determinado recurso de aplicativo. O modo de bloqueio pode ter qualquer um destes valores:
NoLock
Atualização
*SharedIntentExclusive
IntentShared
IntentExclusive
*UpdateIntentExclusive
Compartilhado
Exclusive
*Este modo de bloqueio é uma combinação de outros modos de bloqueio e o sp_getapplock não pode adquiri-lo explicitamente.
Propriedades da função
Não determinístico
Não indexável
Não paralelizável
Exemplos
Dois usuários (Usuário A e Usuário B), com sessões separadas, executam a seguinte sequência de instruções Transact-SQL.
Usuário 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 Usuário B então executa:
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
Então, o Usuário A executa:
EXEC sp_releaseapplock @Resource='Form1', @DbPrincipal='public';
GO
Usuário B executa:
SELECT APPLOCK_TEST('public', 'Form1', 'Exclusive', 'Transaction');
--Result set: '1' (The lock is grantable.)
GO
O Usuário A e o Usuário B executam:
COMMIT TRAN;
GO
Confira também
APPLOCK_TEST (Transact-SQL)
sp_getapplock (Transact-SQL)
sp_releaseapplock (Transact-SQL)