如果存储过程中进行【事务处理】,是不是每一步操作,都要判断@@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
------解决方案--------------------
存储过程中也可不使用事务,
而在客户端调用时使用