当前位置:  开发笔记 > 数据库 > 正文

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

如何解决《我应该使用哪些锁提示(T-SQL)?》经验,为你挑选了1个好方法。

我想实现如下的原子事务:

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子句中使用什么锁定提示来防止在完成更新并提交事务之前更改选定的库存记录?

编辑:非常感谢John,一个好的解决方案似乎是将事务隔离级别设置为REPEATABLE READ.这将确保"在当前事务完成之前,没有其他事务可以修改当前事务已读取的数据".



1> John Sansom..:

实际上,您可能最好设置事务隔离级别而不是使用查询提示.

以下联机丛书中的参考资料提供了每种不同隔离级别的详细信息.

http://msdn.microsoft.com/en-us/library/ms173763.aspx

这篇文章很好地解释了SQL Server中各种类型的锁定行为,并提供了示例.

http://www.sqlteam.com/article/introduction-to-locking-in-sql-server

推荐阅读
路人甲
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有