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

如果存储过程中进行【事务处理】,是不是每一步操作,都要判断@@error=0 呀?
如果存储过程中进行【事务处理】,是不是每一步操作,都要判断@@error=0 呀?
是不是,每个操作,都要判断@@error是不是等于0,如果不等于0就 rollback 事务呀?

这样代码太多了,有没有好的实现方式呢?

------解决方案--------------------
你也可以不写 事务是支持自动回滚的。
------解决方案--------------------
赞同楼上的
------解决方案--------------------
如果一个存储过程中 处理多个复杂的逻辑(尤其是业务牵扯到多个表)时,最好能加 这个判断。否则很容易出错,给自己找麻烦。加了这个判断 使得 逻辑更严谨。加比不加的好。如果只是操作1、2个表 加不加无所谓。关键是跟你的业务有关。
------解决方案--------------------
可以考虑在存储过程中使用TRY CATCH来捕获错误,这样可以不用到处判断@@ERROR了
SQL code

BEGIN TRY
--程序块
END TRY
BEGIN CATCH
    ROLLBACK TRAN
END CATCH

------解决方案--------------------
按照《SQL语言艺术》上说,把整个查询当成一个事务,反而更好,反复判断和回滚会明显增加开销,并且合理的设计和编码不会经常事务不成功。如果是这样,你要考虑设计和编码问题了
------解决方案--------------------
SQL code

SET XACT_ABORT ON
BEGIN TRANSACTION

--你的程序代码

COMMIT TRANSACTION

------解决方案--------------------
SQL code

begin try
   begin transaction
   [statement_block]
   commit transaction
end try
begin catch
   rollback transaction
   select error_number() as error_number ,
          error_message() as error_message,
          error_state() as error_state,
          error_severity() as error_severity
end catch

------解决方案--------------------
存储过程中也可不使用事务,
而在客户端调用时使用