日期:2014-05-18  浏览次数:20527 次

关于T-SQL事务的问题
create   PROCEDURE   Services
as
begin   tran

update   accounts   set   [money]=[money]+500   where   [name]= 'a '

update   accounts   set   [money]=[money]-500   where   [name]= 'c '

commit   tran


我要名字为A的+500钱,名字为C的减500钱.但是我设置了错误就是C不存在.但是我这样执行后A却加了500钱,请问我该如何处理这个错误.
请高手解决

------解决方案--------------------
写错了一个字

update accounts set [money]=[money]-500 where [name]= 'c '

虽然 C 不存在,但这句话没有错误,因此事物并不回滚

------解决方案--------------------
SET XACT_ABORT ON
BEGIN TRANSACTION

COMMIT TRANSACTION
SET XACT_ABORT OFF
------解决方案--------------------
不用事务
@declare @count int
select @count=count(*) from accounts where [name]= 'c '
if @count> 0
begin
update accounts set [money]=[money]+500 where [name]= 'a '
update accounts set [money]=[money]-500 where [name]= 'c '
end

这样虽然不能保证百分百的数据一致 但可以选用