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