Поделиться через


sp_releaseapplock (Transact-SQL)

Область применения: SQL Server База данных SQL Azure Управляемый экземпляр SQL Azure

Снимает блокировку ресурса приложения.

Соглашения о синтаксисе Transact-SQL

Синтаксис

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

Аргументы

[ @Resource = ] N'Ресурс

Имя ресурса блокировки, указанное клиентским приложением. @Resource — nvarchar(255) с значением по умолчаниюNULL. @Resource сравнивается с двоичными данными, поэтому учитывается регистр независимо от параметров сортировки текущей базы данных.

Приложение должно убедиться в уникальности ресурса. Указанное имя хэшируется внутренне в значение, которое может храниться в диспетчере блокировки SQL Server.

[ @LockOwner = ] 'LockOwner'

Владелец блокировки, который является значением @LockOwner при запросе блокировки. @LockOwner — varchar(32) с значением по умолчаниюTransaction. Значение также может быть Session. Если значение @LockOwnerТранзакция, по умолчанию или указанная явно, sp_getapplock должна выполняться из транзакции.

[ @DbPrincipal = ] N'DbPrincipal'

Роль пользователя, роли или приложения, которая имеет разрешения на объект в базе данных. @DbPrincipal — sysname с значением по умолчаниюpublic. Вызывающий эту функцию участник должен быть членом предопределенной роли базы данных database_principal, dbo или db_owner, чтобы успешно выполнить вызов этой функции.

Значения кода возврата

>= 0 (успешно) или < 0 (сбой).

Значение Результат
0 Блокировка успешно снята.
-999 Сигнализирует об ошибке проверки параметра или о другой ошибке вызова процедуры.

Замечания

Когда приложение вызывает sp_getapplock несколько раз для одного ресурса блокировки, sp_releaseapplock необходимо вызвать одно и то же количество раз, чтобы освободить блокировку.

При отключении сервера вне зависимости от причины отключения освобождаются все блокировки.

Разрешения

Необходимо быть членом роли public.

Примеры

В следующем примере освобождается блокировка ресурса Form1, связанная с текущей транзакцией в базе данных AdventureWorks2022.

USE AdventureWorks2022;
GO

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

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