问题:
1、如果一段SQL语句中嵌入一个存储过程,整个SQL是回滚的,那存储过程内部出错会使整个SQL段回滚吗?
2、如果存储过程后面的语句出错,整个SQL段回滚的时候,存储过程也回滚吗?--它内部没有错误
=============================================
回答:
其实第一,第二题的问题是一个,你只要搞清楚事务的统一性就知道答案了,
比如,你现在有2个存储过程,A,B .A是外部的,B是内部嵌套的。首先你要先确保B的过程是一个事务,A的过程也是一个事务。那么在运行时,如果B有问题,报错了,那么B的事务会立即回滚,而且也会将这个错误传给A,那么A也回报错回滚。
你看看这个是sql的事务回滚设置
当 SET XACT_ABORT 为 ON 时,如果 Transact-SQL 语句产生运行时错误,整个事务将终止并回滚。为 OFF 时,只回滚产生错误的Transact-SQL 语句,而事务将继续进行处理。编译错误(如语法错误)不受 SET XACT_ABORT 的影响。
我们默认的情况下是on
=============================================
但是还有问题:
你说了--要先确保B的过程是一个事务 但是我问的问题恰恰是B里面没有事务也就是说B这个存储过程没有回滚的情况下会如何呢?
另外,即便B是一个事务,如果是A报错,B会回滚吗?
存储过程与事物回滚的问题
答案是:任何情况下的事务嵌套.只要任何地方出错,全回滚.事务组合一系列任务为一个执行单元。每个事务以特定的任务开始,以特定的任务结束。当所有的任务成功时事务成功,当任何一个任务失败时,事务失败。所以一个事务只有两个结果:失败或成功。请参考:《SQL Server的事务和错误处理》:http:\/\/www.it11...
JDBC调用存储过程,存储过程中事务回滚,报错
结论:一般而言,我们不建议通过JDBC调用存储过程的时候,在存储过程中定义事务,应该将tx的管理工作交给jdbc去做。 non-xa如此,xa亦如此,毕竟事务嵌套了以后,管理起来是个问题,完整性更是个问题。
关于回滚的疑问
存储过程里发生错误实现回滚需要使用事务的,一般使用的方式是:BEGIN TRANSACTION --事务开始 \/*自己的存储过程主体*\/ --下面是发生错误后回滚返回-1或正常的时候返回1 if @@error<>0 begin rollback tran return -1 end else commit tran return 1 ...
存储过程回滚 急
你要知道判断的依据,也就是执行这个存储过程执行成功的返回值,如果是异常 当 SET XACT_ABORT 为 ON 时,如果执行 Transact-SQL 语句产生运行时错误,则整个事务将终止并回滚。当 SET XACT_ABORT 为 OFF 时,有时只回滚产生错误的 Transact-SQL 语句,而事务将继续进行处理。如果错误很严重,那么即使...
数据库事务、存储过程、函数以及触发器之间的区别和联系
数据库事务、存储过程、函数以及触发器之间的区别和联系如下: 一、事务概念 事务(Transaction)是指构成单一逻辑工作单元的操作集合,要么完整地执行,要么完全不执行。 1、如果事务中有的操作没有成功完成,则事务中的所有操作都需要被回滚,回到事务执行前的状态(要么全执行,要么全都不执行)。 2、同时,该事务对数据库...
sql存储过程中事务出现错误回滚,那么在回滚之后的语句会执行吗_百度...
会的。一般回滚操作都是写在异常处理,或是sql的最后。如果你的sql中出现错误 ,代码会立即跳转到错误处理代码上执行,比如回滚,但紧接在错误行之后的代码不会执行的。如 1.update ...;2.select ...;3.when Exception ...rollback;4.insert into ...以上伪代码,如果行1出错,行2将不会执行...
事务与存储过程是什么关系
事务中可以有存储过程 存储过程中也可以有事务 事务是一系列的对数据库的操作,这些操作包括存储过程,更改语句及其它操作。开始语句是BEGIN TRANSACTION (事务开始),结束语句有两种,一个是ROLLBACK--回滚,一个是--commit提交事务的所有操作。存储过程是实现一定功能的语句组成的程序段。可以包括事务,也...
存储过程执行出错,该怎么解决
第一:如果是存储过程中抛了异常,那么结合事务,出现异常的时候,就回滚事务;第2:如果逻辑不符合需求,这个就只有从新梳理了,这个是没有办法的,
在存储过程中写SET XACT_ABORT ON 有什么用,不写会发生什么问题
设置事务回滚的 当为ON时,如果你存储中的某个地方出了问题,整个事务中的语句都会回滚 为OFF时,只回滚错误的地方
如何在SQL存储过程中处理错误
1 、使用存储过程执行事物,需要开启XACT_ABORT参数(默认值为Off),将该参数设置为On,表示当执行事务时,如果出错,会将transcation设置为uncommittable状态,那么在语句块批处理结束后将回滚所有操作;如果该参数设置为Off,表示当执行事务时,如果出错,出错的语句将不会执行,其他正确的操作继续执行。2、...