如何在事务之外专门锁定和解锁表

时间:2017-11-26 14:47:26

标签: sql sql-server tsql

在SQL Server中,如何在事务之外锁定和解锁(仅限)

原因:我的应用的多个实例需要与一个表进行交互而不会互相踩到脚趾,同时执行无法在事务中运行的语句

1 个答案:

答案 0 :(得分:2)

一种选择可能是调查sp_getapplocksp_releaseapplock

这不会锁定表,而是一个任意命名的资源。然后,您可以将应用程序配置为仅在获取锁定后使用相关表格,例如,通过存储过程。

这方面的一个例子是:

EXEC sp_getapplock @Resource = 'ResourceName', @LockMode = 'Exclusive', @LockOwner = 'Session'

-- UPDATE table, etc.

EXEC sp_releaseapplock @Resource = 'ResourceName', @LockOwner = 'Session'

指定@LockOwner = 'Session'表示您可以在事务之外使用此锁定机制。

还可以选择将锁定语句和释放语句解压缩到自己的存储过程中,因此逻辑只声明一次;这些存储过程可以向调用过程返回一个值,其结果指定是否已获取/释放锁。

此时,这只是确保为每个过程/表/等实施此机制的问题。哪里可能存在争议。