sql 事务自动回滚
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sql 事务自动回滚相关的知识,希望对你有一定的参考价值。
begin tran
delete....
delete.....
delete....
commit tran
这样的事务如果出错不会自动回滚吗?
如果不设置 SET XACT_ABORT (Transact-SQL)当执行到事务某一语句的时候出错了,那就会跳过那一句继续是吗? 不会整个事务都不执行?
指定当 Transact-SQL 语句出现运行时错误时,SQL Server 是否自动回滚到当前事务。
当 SET XACT_ABORT 为 ON 时,如果执行 Transact-SQL 语句产生运行时错误,则整个事务将终止并回滚。
当 SET XACT_ABORT 为 OFF 时,有时只回滚产生错误的 Transact-SQL 语句,而事务将继续进行处理。如果错误很严重,那么即使 SET XACT_ABORT 为 OFF,也可能回滚整个事务。OFF 是默认设置。
编译错误(如语法错误)不受 SET XACT_ABORT 的影响。 参考技术A 你的回滚条件是什么? 没有设置吧??
beigin tran //开始
declare @error1 int //设置变量接收异常
set @error1=0 //初始化为0
delete...
set @error=@@error+@error1 //累加异常
delete...
set @error=@@error+@error1 //累加异常
if @error<>0 //如果有异常 回滚
rollback tran
else
commit tran //否则提交
go 参考技术B 不会,
你要设置断点,在断点处设置回滚的名称,再在下面 Rollback Transaction
Begin Transaction:开始一个事务; Commit Transaction:提交事务; Rollback Transaction:回滚事务。其中Commit Transaction 与Rollback Transaction 都必须有对应的Begin Transaction 才能正确被执行。如: Begin Tran …… Rollback Tran Commit Tran 以上事务只执行了回滚操作。执行Commit Tran系统会返回3902错误,即@@Error=3902,COMMIT TRANSACTION 请求没有对应的 BEGIN TRANSACTION。 Begin Tran …… Commit Tran Rollback Tran 以上事务员执行了提交事务操作。执行Rollback Tran系统会返回3903错误,即@@Error=3903,ROLLBACK TRANSACTION 请求没有对应的 BEGIN TRANSACTION。实例:使用@@Error返回值来控制回滚设有表a,有字段num (int),name (varchar(20));表b, ... 参考技术C SET XACT_ABORT ON
不管下边有没有rollback tran 语句,即便有,也无法执行到该处
都将自动回滚。
SQL回滚事务
我正在尝试删除表格中的数据
BEGIN TRAN
DELETE FROM TABLEA
DELETE FROM TABLEB
ROLLBACK TRAN
但是当我检查表中的数据时,数据确实存在。
如果要回滚事务,则取消未提交的更改。如果您打开事务,删除和回滚,则数据将存在。
如果要提交事务(删除信息),则执行
BEGIN TRAN
DELETE FROM TABLEA
DELETE FROM TABLEB
COMMIT TRAN
以下是有关SQL Server中TRANSACTION
的一些解释
交易是一个单一的工作单位。如果事务成功,则在事务期间进行的所有数据修改都将被提交并成为数据库的永久部分。如果事务遇到错误并且必须取消或回滚,则所有数据修改都将被删除。
另外请记住,使用TRANSACTION
暂时锁定表,所以你必须小心。
BEGIN TRAN
Statement1
Statement2
COMMIT TRAN
如果其中一个声明失败或有一些错误,transaction
将rollback
并忽略所有声明,并且将不会有任何更改
当你使用ROLLBACK TRAN
时,它会删除从transaction
开始使用COMMIT TRAN
所做的所有数据修改
更换
ROLLBACK TRAN
同
COMMIT TRAN
并且数据将被删除。 rollback tran
表示取消交易中的所有更改。
- 作为总结
BEGIN TRAN
DELETE FROM TABLEA
DELETE FROM TABLEB
ROLLBACK/COMMIT TRAN
--ROLLBACK:在名称回滚中,它将取消该进程。
--COMMIT:在提交名称中,它将确认该过程。
BEGIN TRY
BEGIN TRAN
DELETE FROM TABLEA
DELETE FROM TABLEB
COMMIT TRAN
END TRY
BEGIN CATCH
SELECT
ERROR_NUMBER() AS ErrorNumber
,ERROR_SEVERITY() AS ErrorSeverity
,ERROR_STATE() AS ErrorState
,ERROR_PROCEDURE() AS ErrorProcedure
,ERROR_LINE() AS ErrorLine
,ERROR_MESSAGE() AS ErrorMessage
IF @@TRANCOUNT > 0
ROLLBACK TRANSACTION
END CATCH
如果事务中有多个操作,则应始终使用try-catch块来回滚事务的一部分,这是事务失败的一部分。
以上是关于sql 事务自动回滚的主要内容,如果未能解决你的问题,请参考以下文章