sp_releaseapplock (Transact-SQL)

适用于:SQL ServerAzure SQL 数据库Azure SQL 托管实例

为应用程序资源释放锁。

Transact-SQL 语法约定

语法

  
sp_releaseapplock [ @Resource = ] 'resource_name'   
     [ , [ @LockOwner = ] 'lock_owner' ]  
     [ , [ @DbPrincipal = ] 'database_principal' ]  
[ ; ]  

参数

[ @Resource= ] “resource_name
由客户端应用程序指定的锁资源名称。 应用程序必须确保该资源是唯一的。 指定名称在内部哈希为可存储在 SQL Server 锁管理器中的值。 resource_namenvarchar(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 数据库中资源 AdventureWorks2022 的当前事务关联的锁。

USE AdventureWorks2022;  
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)