打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
SQL事务回滚的两种方式
本文链接:https://blog.csdn.net/u011791378/article/details/83584240
1.XACT_ABORT
1)set XACT_ABORT off时,回滚产生错误的Transact-SQL语句,而事务将继续进行处理,(注:错误严重或者语法错误时可能回滚整个事务)
2) set XACT_ABORT ON时,如果Transact-SQL语句产生运行时错误,整个事务将终止并回滚,
步骤1:
CREATE TABLE [dbo].[A](
[ID] [int] IDENTITY(1,1) NOT FOR REPLICATION NOT NULL,
[Name] [nvarchar](5) NULL,
[CreateDate] [datetime] NULL,
CONSTRAINT [PK_A] PRIMARY KEY CLUSTERED
(
[ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
--默认XACT_ABORT=off
SET XACT_ABORT off
begin tran
insert into [dbo].[A](Name,CreateDate) values('测试off',GETDATE());
insert into [dbo].[A](Name,CreateDate) values('测试off_异常',GETDATE());
insert into [dbo].[A](Name,CreateDate) values('测试off',GETDATE());
commit tran
(1 行受影响)
消息 8152,级别 16,状态 4,第 3 行
将截断字符串或二进制数据。
语句已终止。
(1 行受影响)
select * from [dbo].[A]ID Name CreateDate
1          测试off
2018-10-31 15:06:09.330
3 测试off 2018-10-31 15:06:09.333
注意:
事务的回滚对于拥有自增主键的表来说,insert的数据是被删除,update和delete的数据是被恢复  。所以上面所显示的ID=3 。
步骤2:
set XACT_ABORT ON
begin tran
insert into [dbo].[A](Name,CreateDate) values('测试on',GETDATE());
insert into [dbo].[A](Name,CreateDate) values('测试on_异常',GETDATE());
insert into [dbo].[A](Name,CreateDate) values('测试on',GETDATE());
commit tran
同样执行select 查询语句  得到如下结果
ID Name CreateDate
1          测试off
2018-10-31 15:06:09.330
3 测试off 2018-10-31 15:06:09.333
证明事务全部回滚成功。(注意下次新增数据的时候,ID的值。。。)
2.rollback
在sql中用事务的时候一般是这么写。
declare @error int ;
begin tran
begin try
insert into [dbo].[A](Name,CreateDate) values('测试异常',GETDATE());
insert into [dbo].[A](Name,CreateDate) values('测试异常_错误',GETDATE());
insert into [dbo].[A](Name,CreateDate) values('测试异常',GETDATE());
end try
begin catch
set @error=1
end catch
if @error>0
rollback tran
else
commit tran
注:
判断事务回滚,则整个事务里面的sql语句一起回滚,跟SET XACT_ABORT ON相似,不同的是当事务进行嵌套时,如果用事务判断的方法,嵌套的子事务不出错,外面语句出错,那么整个事务只会回滚外面出错的语句,子事务提交成功了就回滚不了了,但是用SET XACT_ABORT ON,即使子事务提交成功,如果外围事务出错,子事务还是回滚.
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
SET XACT_ABORT 的用法
SQL Server 中的事务与事务隔离级别以及如何理解脏读, 未提交读,不可重复读和幻读产生的过程和原因
SQL Server数据库事务处理详解
使用 SQL Server 时需要经常用到的几个设置选项!
SQL Server 事务相关的存储过程
分布式事务已完成。请将此会话登记到新事务或 NULL 事务中
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服