sp_releaseapplock (Transact-SQL)
Снимает блокировку ресурса приложения.
Синтаксические обозначения в Transact-SQL
Синтаксис
sp_releaseapplock [ @Resource = ] 'resource_name'
[ , [ @LockOwner = ] 'lock_owner' ]
[ , [ @DbPrincipal = ] 'database_principal' ]
[ ; ]
Аргументы
- [ @Resource = ] 'resource_name'
Имя ресурса блокировки, указанного клиентским приложением. Приложение должно убедиться в уникальности ресурса. Указанное имя внутренним образом хэшируется в значение, которое может храниться в диспетчере блокировок SQL Server. Аргумент resource_name имеет тип nvarchar(255) и не имеет значения по умолчанию. Значение аргумента resource_name сравнивается по битам с учетом регистра независимо от настроек параметров сортировки текущей базы данных.
- [ @LockOwner = ] 'lock_owner'
Владелец данной блокировки, который является значением аргумента lock_owner при запросе блокировки. Аргумент lock_owner имеет тип nvarchar(32). Значением этого аргумента может быть Transaction (по умолчанию) или Session. Когда аргумент lock_owner имеет значение Transaction, установленное по умолчанию или определенное явно, процедура sp_getapplock должна выполняться в рамках транзакции.
- [ @DbPrincipal = ] 'database_principal'
Пользователь, роль или роль приложения, обладающие разрешениями на доступ к объекту базы данных. Вызывающий эту функцию участник должен быть членом фиксированной роли базы данных database_principal, dbo или db_owner, чтобы успешно выполнить вызов этой функции. Значение по умолчанию — public.
Значения кодов возврата
>= 0 (успешное завершение) или < 0 (неуспешное завершение)
Значение | Результат |
---|---|
0 |
Блокировка успешно снята. |
-999 |
Сигнализирует об ошибке проверки аргументов или о другой ошибке вызова процедуры. |
Замечания
Если приложение вызывает процедуру sp_getapplock несколько раз для одного и того же ресурса блокировки, то процедура sp_releaseapplock должна вызываться такое же количество раз для снятия блокировки.
При отключении сервера вне зависимости от причины отключения освобождаются все блокировки.
Разрешения
Необходимо членство в роли public.
Примеры
В следующем примере освобождается блокировка ресурса Form1
, связанная с текущей транзакцией в базе данных AdventureWorks
.
USE AdventureWorks;
GO
EXEC sp_getapplock @DbPrincipal = 'dbo', @Resource = 'Form1',
@LockMode = 'Shared';
EXEC sp_releaseapplock @DbPrincipal = 'dbo', @Resource = 'Form1';
GO
См. также
Справочник
APPLOCK_MODE (Transact-SQL)
APPLOCK_TEST (Transact-SQL)
sp_getapplock (Transact-SQL)