SQL 服务器:已提交读取中的原子更新,可以检测并发写入吗?

SQL Server: atomic update in read committed, can detect concurrent write?

如果我有同时使用读提交隔离级别和事务主体的并发事务,如下所示:

DECLARE @value..

SELECT @value = balance
FROM MyTable
WHERE Account = 1

UPDATE MyTable
SET balance = @value+@pAmount
WHERE Account = 1 AND Balance = @value

IF @@COUNT == 0 
    THROW 'another transaction changed'

当 UPDATE 的 WHERE 读取 Balance 列时,它是否保证读取已提交或是否读取另一个打开的事务的脏写?换句话说,我可以使用 READ COMMITTED 检测丢失的更新并检查我的更新是否有任何影响。

由于 @value 似乎是一个标量变量,我认为您只需一次更新就可以完成整个逻辑:

UPDATE MyTable
SET balance = balance + 1
WHERE Account = 1;

原因是 @value 应该始终只是第一个帐户的当前余额。