当前位置: 代码迷 >> Sql Server >> 如果存储过程中进行【事务处理】,是不是每一步操作,都要判断@@error=0 呀?该怎么解决
  详细解决方案

如果存储过程中进行【事务处理】,是不是每一步操作,都要判断@@error=0 呀?该怎么解决

热度:311   发布时间:2016-04-27 12:21:03.0
如果存储过程中进行【事务处理】,是不是每一步操作,都要判断@@error=0 呀?
如果存储过程中进行【事务处理】,是不是每一步操作,都要判断@@error=0 呀?
是不是,每个操作,都要判断@@error是不是等于0,如果不等于0就 rollback 事务呀?

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

------解决方案--------------------
你也可以不写 事务是支持自动回滚的。
------解决方案--------------------
赞同楼上的
------解决方案--------------------
如果一个存储过程中 处理多个复杂的逻辑(尤其是业务牵扯到多个表)时,最好能加 这个判断。否则很容易出错,给自己找麻烦。加了这个判断 使得 逻辑更严谨。加比不加的好。如果只是操作1、2个表 加不加无所谓。关键是跟你的业务有关。
------解决方案--------------------
可以考虑在存储过程中使用TRY CATCH来捕获错误,这样可以不用到处判断@@ERROR了
SQL code
BEGIN TRY--程序块END TRYBEGIN CATCH    ROLLBACK TRANEND CATCH
------解决方案--------------------
按照《SQL语言艺术》上说,把整个查询当成一个事务,反而更好,反复判断和回滚会明显增加开销,并且合理的设计和编码不会经常事务不成功。如果是这样,你要考虑设计和编码问题了
------解决方案--------------------
SQL code
SET XACT_ABORT ONBEGIN TRANSACTION--你的程序代码COMMIT TRANSACTION
------解决方案--------------------
SQL code
begin try   begin transaction   [statement_block]   commit transactionend trybegin catch   rollback transaction   select error_number() as error_number ,          error_message() as error_message,          error_state() as error_state,          error_severity() as error_severityend catch
------解决方案--------------------
存储过程中也可不使用事务,
而在客户端调用时使用
  相关解决方案