如果我有并发事务,则都使用读取的提交隔离级别和事务主体,如下所示:
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来检测丢失的更新并检查我的更新是否有效。
答案 0 :(得分:1)
由于@value
似乎是一个标量变量,我认为您只需一次更新就可以完成整个逻辑:
UPDATE MyTable
SET balance = balance + 1
WHERE Account = 1;
这样做的原因是@value
应该始终只是第一个帐户的当前余额。