首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

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

2012-06-16 
如果存储过程中进行【事务处理】,是不是每一步操作,都要判断@@error0 呀?如果存储过程中进行【事务处理】,是

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

热点排行