Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Aplica-se a:SQL Server
Base de Dados SQL do Azure
Azure SQL Managed Instance
Base de dados SQL no Microsoft Fabric
Esta função devolve informação sobre se um bloqueio pode ou não ser concedido a um determinado recurso de aplicação, para um proprietário especificado do bloqueio, sem a aquisição do bloqueio. Como função de bloqueio de aplicação, APPLOCK_TEST 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_TEST ( 'database_principal' , 'resource_name' , 'lock_mode' , '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_mode'
O modo de bloqueio para obter para um recurso específico.
lock_mode é nvarchar(32), sem valor padrão.
lock_mode pode ter qualquer um destes valores: Partilhado, Atualização, IntençãoPartilhada, IntençãoExclusiva, Exclusiva.
'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. Se o Default ou a Transação for explicitamente especificado, APPLOCK_TEST deve ser executada dentro de uma transação.
Tipos de devolução
smallint
Valor de retorno
0 se a fechadura não puder ser concedida ao proprietário especificado, ou 1 se a fechadura puder ser concedida.
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 ambos:
COMMIT TRAN;
GO