SQL事务处理怎么不能更新两条信息?

来源:百度知道 编辑:UC知道 时间:2024/05/11 21:33:42
create trigger trig_virement
on virementTable
for insert

As
declare @money money,@accountMoney money,@geterID int,@adderID int

select @money=Money from inserted --取插入的金额
select @geterID=geterID from inserted --取提钱会员ID
select @adderID=adderID from inserted --取收钱会员ID
select @accountMoney=accountMoney from userTable where userID=@geterID --取该会员账号的余额

--如果余额不足扣 回滚事务
if @money>@accountMoney
begin
rollback transaction
end

--余额足扣 更新数据
else
begin
update userTable set accountMoney=accountMoney+@money where userID=@adderID
update userTable set accountMoney=accountMoney-@money where userID=@geterID
end

go

最后面这两条更新 谁放在第一条就更新 第二条就不更新的 郁闷! 谁能帮下忙!
是的 我写错了 不是事务 应该是触发器!但这两个更新后面我都加了条件的哦 !

----------
你最后的SQL逻辑上就有问题:这两条语句实质上更新的是同一个数据accountMoney,只不过先更新为accountMoney+@money,然后紧接着再更新为accountMoney-@money
和事务没有关系的。
---------
抱歉,我看错了那两个条件!
可能是隐式事务的原因:
触发器本身就是一个隐藏的事务。当有insert 与 update的时候,系统会自动加锁,直到该事务完成,所以尽量缩短事务的执行过程。你的userTable是不是也有触发器,因为第一句的触发导致表被锁定了