Partilhar via


sp_releaseapplock (Transact-SQL)

Aplica-se a: SQL Server Banco de Dados SQL do Azure Instância Gerenciada de SQL do Azure

Libera um bloqueio em um recurso de aplicativo.

Convenções de sintaxe de Transact-SQL

Sintaxe

sp_releaseapplock
    [ [ @Resource = ] N'Resource' ]
    [ , [ @LockOwner = ] 'LockOwner' ]
    [ , [ @DbPrincipal = ] N'DbPrincipal' ]
[ ; ]

Argumentos

@Resource [ = ] N'Recurso'

Um nome de recurso de bloqueio especificado pelo aplicativo cliente. @Resource é nvarchar(255), com um padrão de NULL. @Resource é comparada em binário, portanto, diferencia maiúsculas de minúsculas, independentemente das configurações de ordenação do banco de dados atual.

O aplicativo deve garantir que o recurso seja exclusivo. O nome especificado é hash internamente em um valor que pode ser armazenado no gerenciador de bloqueio do SQL Server.

@LockOwner [ = ] 'LockOwner'

O proprietário do bloqueio, que é o valor @LockOwner quando o bloqueio foi solicitado. @LockOwner é varchar(32), com um padrão de Transaction. O valor também pode ser Session. Quando o valor @LockOwner é Transaction, por padrão ou especificado explicitamente, sp_getapplock deve ser executado de dentro de uma transação.

@DbPrincipal [ = ] N'DbPrincipal'

A função de usuário, função ou aplicativo que tem permissões para um objeto em um banco de dados. @DbPrincipal é sysname, com um padrão de public. O chamador da função deve ser membro da função de banco de dados fixa database_principal, dbo ou db_owner para chamar a função com êxito.

Valores do código de retorno

>= 0 (sucesso) ou < 0 (fracasso).

Valor Resultado
0 O bloqueio foi liberado com êxito.
-999 Indica validação de parâmetro ou outro erro de chamada.

Comentários

Quando um aplicativo chama sp_getapplock várias vezes para o mesmo recurso de bloqueio, sp_releaseapplock deve ser chamado o mesmo número de vezes para liberar o bloqueio.

Quando o servidor é desligado por algum motivo, os bloqueios são liberados.

Permissões

Requer associação à função pública .

Exemplos

O exemplo a seguir libera o bloqueio associado à transação atual no recurso Form1 do banco de dados AdventureWorks2022.

USE AdventureWorks2022;
GO

EXEC sp_getapplock @DbPrincipal = 'dbo',
    @Resource = 'Form1',
    @LockMode = 'Shared';

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