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、dbodb_owner 固定数据库角色的成员,才能成功调用该函数。默认值为 public。

返回代码值

>= 0(成功),或 < 0(失败)

结果

0

成功释放锁。

-999

指示参数验证或其他调用错误。

注释

如果某个应用程序为同一锁资源多次调用 sp_getapplock,则必须调用 sp_releaseapplock 同样次数才能释放锁。

服务器因任何原因而关闭时,都将释放锁。

权限

要求具有 public 角色成员身份。

示例

以下示例释放与 AdventureWorks 数据库中资源 Form1 的当前事务关联的锁。

USE AdventureWorks;
GO
EXEC sp_getapplock @DbPrincipal = 'dbo', @Resource = 'Form1', 
     @LockMode = 'Shared';
EXEC sp_releaseapplock @DbPrincipal = 'dbo', @Resource = 'Form1';
GO