读书人

事务的回滚有关问题

发布时间: 2012-03-19 22:03:05 作者: rapoo

事务的回滚问题
我在存储过程中要调用n个别的存储,一个存储不成功,就要回滚,改如何来作呢?

CREATE PROCEDURE OnlineHanding
@UserName VARCHAR( 50 ),
@ContractID UNIQUEIDENTIFIER
AS

BEGIN TRANSACTION

DECLARE @ErrMessage BIT

-----第一步处理不合格数据
EXEC OnlineCheckData @UserName

------更新 MST_AirlineId 和 FraeGoupID ,RoutingI,以及检查和插入Routing和插入相关的表AirPortGroup,AirPortElement
EXEC OnlineUpdateData @UserName, @ContractID ,@ErrMessage OUTPUT

--其他的操作......

...........

IF @@ERROR = 0
COMMIT TRANSACTION
ELSE

ROLLBACK TRANSACTION
--这句delete是一定要做的
DELETE OnlineTempTable WHERE Operator = @UserName
GO



[解决办法]
是的,你应该从被调用的存储过程返回值进行判断,而作出事务的处理决定。
[解决办法]
关注

[解决办法]
@@error是用来判断最近的SQL语句执行成功与否的全局函数,不建议楼主使用这个东西判断存储过程是否执行成功,相反地你应该在每个存储过程中使用这个函数来返回不同的值用来标志你的存储过程是否执行成功。使用return返回存储过程的结果,就好像C语言的函数一样的。在调用存储过程时候根据return的返回值判断是否执行成功就可以了。

读书人网 >SQL Server

热点推荐