这是对是否可以在 SQL Server 中强制行级锁定的扩展?. 这是用例
我有一个包含帐号、余额等的帐户表。该表被许多应用程序使用。很有可能,当我修改一个帐户时,其他人正在修改另一个帐户。所以预期的行为是我将锁定我的帐户(ROW),而其他用途将锁定他的(另一个 ROW)。
但是 SQL Server 2008 R2 将此锁定升级到页面/表,并且第二个用户得到超时异常。我已经尝试了引用问题中提到的所有解决方案,但没有任何效果。
如何强制 SQL Server 仅锁定行级锁,或者如何修改此模型以使其与页/表锁定一起使用?
编辑 该更新通过其 PK 以单个记录为目标,并且已编入索引,因此只有 ONE ROW 被更新/锁定,并且该过程不超过一分钟
编辑 现在看起来有些奇怪的事情正在发生。我正在为 DAL 使用一个 ORM 库,它打开了多个连接,我已经向他们的支持提出了这个问题。但是,出于测试目的,我在查询工具上打开了两个会话并做了以下操作
Session # 1
begin tran
UPDATE myTable SET COL_1 = COL_1 WHERE COL_1 = 101;
Session # 2
SELECT COL_1 FROM myTable WHERE COL_1 = 101;
Session # 2 中的查询超时!!!对其他值的查询COL_1
工作正常。现在,如果同一记录在另一个会话中处于编辑模式,则看起来 SELECT 被阻止了一个会话。
尽管 Oracle 确实支持在其他会话修改行时选择行(使用默认参数/无关键字),但 SQL Server 不支持(使用默认参数/无关键字),因此问题似乎出在库上。