APPLOCK_MODE (Transact-SQL)
Retorna o modo de bloqueio mantido pelo proprietário de bloqueio em um determinado recurso de aplicativo. APPLOCK_MODE é uma função de bloqueio de aplicativo e opera no banco de dados atual. O escopo de bloqueios de aplicativo é o banco de dados.
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. O chamador da função deve ser um membro da função de banco de dados fixa database_principal, dbo, ou db_owner para chamar a função com êxito.'resource_name'
É um nome de recurso de bloqueio especificado pelo aplicativo cliente. O aplicativo deve garantir que o nome do recurso seja exclusivo. É feito hash internamente do nome especificado para um valor que pode ser armazenado no gerenciador de bloqueios do MicrosoftSQL Server. resource_name é nvarchar(255) sem nenhum padrão. resource_name é comparado com binário e diferencia maiúsculas e minúsculas, independentemente das configurações de agrupamento do banco de dados atual.'lock_owner'
É o proprietário do bloqueio, que é o valor 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 de retorno
Retorna o modo de bloqueio mantido pelo proprietário de bloqueio em um determinado recurso de aplicativo. O modo de bloqueio pode ser qualquer um destes valores:
NoLock |
Update |
*SharedIntentExclusive |
IntentShared |
IntentExclusive |
*UpdateIntentExclusive |
Shared |
Exclusive |
|
*Este modo de bloqueio é uma combinação de outros modos de bloqueio e não é adquirido explicitamente usando sp_getapplock.
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 seqüência de instruções Transact-SQL.
Usuário A executa:
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
Usuário B executa:
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
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
Usuário A e Usuário B executam:
COMMIT TRAN;
GO
Consulte também