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

时间:2019-03-05 04:55:30

标签: sql-server transaction-isolation

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

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来检测丢失的更新并检查我的更新是否有效。

1 个答案:

答案 0 :(得分:1)

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

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

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