set XACT_ABORT ON   ---如果不设置该项为ON,在sql中默认为OFF,那么只只回滚产生错误的 Transact-SQL 语句;设为ON,回滚整个事务

begin tran t1 ---启动一个事务

update [water].[dbo].[ErrorInf]
set ErrorMessage='test'
where ID=6 insert into [water].[dbo].[ErrorInf]([ID],ErrorMessage,[Description])
Values(1,'test1','test1') commit tran t1  ---提交事务

功能:实现begin tran 和commit tran之间的语句,任一如果出现错误,所有都不执

事务不是有错就回滚的,在不写rollback的情况下,并不是什么错误都会回滚事务,有时回滚当前语句,有时回滚整个事务

如例

begin tran 
insert into dbo.area values('')
insert into dbo.area values('')
select 1/0
insert into dbo.area values('')
commit

像这样,就算中间有错,也不会回滚,结果会成功添加三条记录

但有人说,比如重大错误,这事务也会所有回滚,只是我无法重现重大错误罢了

普通错误如果想回滚整个事务,只要加个set XACT_ABORT on就可以了


set XACT_ABORT on

begin tran

insert into dbo.area values('')
insert into dbo.area values('')
select 1/0
insert into dbo.area values('') commit

但也有人写一堆@@error,如


begin tran 

insert into dbo.area values('')
if @@error>0
  rollback insert into dbo.area values('')
if @@error>0
  rollback select 1/0
if @@error>0
  rollback insert into dbo.area values('')
if @@error>0
  rollback commit

当然也行,不过写起来太麻烦了.

后来发现sql2005支持try


BEGIN TRY
   BEGIN TRANSACTION
     insert into dbo.area values('')
    insert into dbo.area values('')
    select 1/0
    insert into dbo.area values('')
   COMMIT
END TRY
BEGIN CATCH
   IF @@TRANCOUNT > 0
     ROLLBACK   DECLARE @ErrMsg nvarchar(4000), @ErrSeverity int
  SELECT @ErrMsg = ERROR_MESSAGE(),
         @ErrSeverity = ERROR_SEVERITY()   RAISERROR(@ErrMsg, @ErrSeverity, 1)
END CATCH

Sql Server 事务/回滚的更多相关文章

  1. SQL Server事务回滚对自增键的影响

    SQL Server事务回滚时是删除原先插入导致的自增值,也就是回滚之前你你插入一条数据导致自增键加1,回滚之后还是加1的状态 --如果获取当前操作最后插入的identity列的值:select @@ ...

  2. 【SQL】事务回滚

    事务(Transaction)是并发控制的单位,是用户定义的一个操作序列.这些操作要么都做,要么都不做,是一个不可分割的工作单位.通过事务,SQL Server能将逻辑相关的一组操作绑定在一起,以便服 ...

  3. 哪些异常是RuntimeException?Sql异常属于RuntimeException吗?Spring下SQL异常事务回滚

    一,为什么框架中根本没有对Exception的一般子类进行回滚配置,异常发生时,事务都进行了回滚 ,说好的只会对RuntimeException(Unchecked 非受检异常)回滚呢? 此时,我们就 ...

  4. SQL的事务回滚操作带案例分析

    SET XACT_ABORT on  BEGIN TRAN  INSERT INTO [PDA_Action] VALUES ('採购入库1')  INSERT INTO [PDA_Action] V ...

  5. SQL 事务回滚

    事务(Transaction)是并发控制的单位,是用户定义的一个操作序列.这些操作要么都做,要么都不做,是一个不可分割的工作单位.通过事务,SQL Server能将逻辑相关的一组操作绑定在一起,以便服 ...

  6. [SQL]事务回滚详解及示例

    存储过程中的 SET XACT_ABORT ON 和事务 在存储过程中写SET XACT_ABORT ON 有什么用? SET XACT_ABORT ON是设置事务回滚的! 当为ON时,如果你存储中的 ...

  7. SQL Server 事务、异常和游标

    转自:http://www.cnblogs.com/hoojo/archive/2011/07/19/2110325.html Ø 事务 在数据库中有时候需要把多个步骤的指令当作一个整体来运行,这个整 ...

  8. 人人都是 DBA(VI)SQL Server 事务日志

    SQL Server 的数据库引擎通过事务服务(Transaction Services)提供事务的 ACID 属性支持.ACID 属性包括: 原子性(Atomicity) 一致性(Consisten ...

  9. SqlServer事务回滚(2)

    SQL Server 2008中SQL应用系列--目录索引 SQL事务 一.事务概念    事务是一种机制.是一种操作序列,它包含了一组数据库操作命令,这组命令要么全部执行,要么全部不执行.因此事务是 ...

随机推荐

  1. 右键git-bash不能使用

    主要:右键git-bash不能使用 右键git-bash不能使用 今日想用git传写代码到仓库,突然发现几天没有却出问题了,右键出现了错误,虽然很快解决了,但还是可以记录下 情形: 右键存在但不能使用 ...

  2. 操作 Java 数组的 12 个最佳方法

    1.  声明一个数组 Java代码: String[] aArray = new String[5]; String[] bArray = {"a","b",& ...

  3. 虚拟机桥接模式下多台Ubuntu16.04系统互相连接

    1.首先新建一个虚拟机并在该虚拟机上安装Ubuntu16.04系统.为这台虚拟机起名为Ubuntu3. 2.对Ubuntu3进行克隆,为新克隆生成的虚拟机起名为Ubuntu2.(这时我们会发现Ubun ...

  4. JDK学习---深入理解java中的String

    本文参考资料: 1.<深入理解jvm虚拟机> 2.<大话数据结构>.<大话设计模式> 3.http://www.cnblogs.com/ITtangtang/p/3 ...

  5. ./vi: line 2: mkdir: command not found

    当前两天博主在写脚本的时候,运行脚本时候总是出现此消息,很郁闷, 开始我以为可能是我mkdir的函数库依赖的问题,但是当我用其他的脚本创建 目录的时候,命令又可以用了,找了半天,终于找到了答案 --- ...

  6. 779. K-th Symbol in Grammar

    class Solution { public: int kthGrammar(int N, int K) { return helper(N, K, false); } int helper(int ...

  7. C语言进阶——变量属性05

    C语言变量属性: C语言的变量可以有自己的属性 在定义变量的时候加上“属性”关键字 “属性”关键字指明变量的特有意义 语法:property type value_name; auto关键字: aut ...

  8. web开发学习之路是否有尽头

    Linux/Git/Pip/Npm/Composer Apache/Ngnix Mysql/MongoDb/Redis PHP/Python/NodeJS javascript/jQuery/Expr ...

  9. PJMEID学习之视频的捕捉与播放

    pjmedia是pjsip的视频部分,官网明确提示,要想使用pjmedia离不开directshow/sdl/ffmpeg这三个库. 软件版本的限制: ffmpeg不能高于1.25.(建议下载1.01 ...

  10. sweetalert : 一个比较好看的弹出框

    1.引入 <script src="https://unpkg.com/sweetalert/dist/sweetalert.min.js"> </script& ...