我应该使用哪些锁提示(T-SQL)?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (20)

我想实现一个原子事务,如下所示:

BEGIN TRAN A

SELECT id
FROM Inventory
WITH (???)
WHERE material_id = 25 AND quantity > 10

/*
Process some things using the inventory record and
eventually write some updates that are dependent on the fact that
that specific inventory record had sufficient quantity (greater than 10).
*/

COMMIT TRAN A

问题是,还有其他事务正在发生,消耗了我们库存中的数量,所以从选择记录到在事务A中写入更新之间,该记录可能会成为无效选择,因为它的数量可能已经降低到WHERE子句中的阈值以下。

所以问题是,在完成更新和提交事务之前,我应该在WITH子句中使用哪些锁定提示来防止所选的库存记录被更改?

提问于
用户回答回答于
用户回答回答于

WITH (HOLDLOCK)允许其他读者。UPDLOCK如其他地方所建议的那样是排他性的。

HOLDLOCK将阻止其他更新,但它们可能使用稍后更新的数据。

UPDLOCK将阻止任何人在提交或回滚之前读取数据。

扫码关注云+社区