我有个sqlserver 表 dbo.Money (ID(主键自增),MemberID,Money,Balance)
频繁对该表使用如下sqlserver语句插入流水数据
Insert into dbo.Money(MemberID,Money,Balance)
SELECT @MemberID,@Money,IsNull((Select Top 1 Balance From dbo.Money with(nolock) Where MemberID=@MemberID ORDER BY ID DESC),0)+@Money
WHERE (IsNull((Select Top 1 Balance From dbo.Money Where MemberID=@MemberID ORDER BY ID DESC),0)+@Money)>=0
出现了数据错误 当@money为负数时 多次插入后出现了Balance为负数的情况
我猜测是并发导致了问题 但不清楚是哪种情况 如果我对select Top 1 Balance加上更新锁能解决问题么? 是否合理呢?