小编Man*_*ong的帖子

如何检查谁持有我想授予的锁?

考虑以下情况:

公司中的某些用户可能会读取和更新数据库中的客户数据(来自前端应用程序)。

为避免同一客户重复更新,如果用户A开始修改特定客户的数据,则在用户A完成并更新数据库之前,没有人可以修改该客户的数据(用户A持有该客户数据的排他锁)。

如果另一个用户尝试修改相同的客户数据,系统将立即返回错误信息,表明用户 A 已经在修改该客户的数据。

对于这样的需求,我想在用户 A 开始编辑客户数据时sp_getapplock使用名称作为唯一客户 ID授予排他锁。然后当另一个用户尝试编辑时,系统将返回无法授予锁定,因为用户 A 持有它。

以下是我预期的 SQL:

SET TRANSACTION ISOLATION LEVEL READ COMMITTED
BEGIN TRANSACTION

DECLARE @result INT
EXEC @result = sp_getapplock
            @Resource = 'UniqueCustomerID', @LockMode = 'Exclusive', @LockTimeout = 0

IF @result = 0
    --Successful grant the lock, perform the data update action here
ELSE
    --The lock is holding by someone, return the SPID who holds the lock
COMMIT TRANSACTION
Run Code Online (Sandbox Code Playgroud)

如何检索持有锁的 SPID?我知道sys.sysprocesses并且sp_who可以通过SPID获取 …

sql t-sql sql-server sql-server-2008-r2

5
推荐指数
1
解决办法
4075
查看次数

标签 统计

sql ×1

sql-server ×1

sql-server-2008-r2 ×1

t-sql ×1