数据库事物的用法和作用就不再重复,写一下在实战当中遇到的问题,代码如下:

begin tran --开始执行事务 
    --语句一

update  set acount = acount-100 where person = 1

--语句二

update  set acount = acount+100 where person = 2

--语句三

insert into T_IMP_LOG values (1,2,100)

if @@error<>0 --判断如果语句有任何一条出现错误
begin rollback tran --开始执行事务的回滚 
return 0
end
else   --如何都执行成功
begin 
commit tran --执行这个事务的操作
return 1
end
 在上面代码中,我遇到的问题是:语句二出错,语句一仍然执行,语句三不执行,本以为添加了事物控制就能全部回滚,后来查了资料才知道需要加上SET XACT_ABORT ON。

语法
SET XACT_ABORT { ON | OFF }

注释
当 SET XACT_ABORT 为 ON 时,如果 Transact-SQL 语句产生运行时错误,整个事务将终止并回滚。为 OFF 时,只回滚产生错误的 Transact-SQL 语句,而事务将继续进行处理。编译错误(如语法错误)不受 SET XACT_ABORT 的影响。

对于大多数 OLE DB 提供程序(包括 SQL Server),隐性或显式事务中的数据修改语句必须将 XACT_ABORT 设置为 ON。唯一不需要该选项的情况是提供程序支持嵌套事务时。有关更多信息,请参见分布式查询和分布式事务。

SET XACT_ABORT 的设置是在执行或运行时设置,而不是在分析时设置。

如果想要事物支持出错全部回滚,那么上面的代码如下:

SET XACT_ABORT  ON

begin tran --开始执行事务 
    --语句一

update  set acount = acount-100 where person = 1

--语句二

update  set acount = acount+100 where person = 2

--语句三

insert into T_IMP_LOG values (1,2,100)

if @@error<>0 --判断如果语句有任何一条出现错误
begin rollback tran --开始执行事务的回滚 
return 0
end
else   --如何都执行成功
begin 
commit tran --执行这个事务的操作
return 1
end

转载:http://blog.csdn.net/fengchao1000/article/details/7717841

数据库事物用法 SET XACT_ABORT ON的更多相关文章

  1. 数据库事物四大特性-ACID

    事务的:原子性.一致性.分离性.持久性 事物(transaction)是由一些列操作序列构成的执行单元,这些单元要么都做,要么不做,是一个不可分割的工作单元. 数据库事物的四个基本性质(ACID) 1 ...

  2. Spring中的数据库事物管理

    Spring中的数据库事物管理 只要给方法加一个@Transactional注解就可以了 例如:

  3. 数据库事物 jdbc事物 spring事物 隔离级别:脏幻不可重复读

    1.数据库事物: 事物的概念 a给b打100块钱的例子 2.jdbc事物: 通过下面代码实现 private Connection conn = null; private PreparedState ...

  4. spring boot redis 数据库缓存用法

    缓存处理方式应该是 1.先从缓存中拿数据,如果有,直接返回.2.如果拿到的为空,则数据库查询,然后将查询结果存到缓存中.由此实现方式应该如下: private String baseKey = &qu ...

  5. Spring+Mybatis+SpringMVC+Atomikos多数据源共存+不同数据库事物一致性处理

    网上找了一大堆的例子,没一个跑通的,都是copy转发,哎,整理得好辛苦..做个笔记,方便正遇到此问题的猿们能够得到帮助....废话不多说,贴代码..... 项目结构说明: 1.dao层的admin.w ...

  6. mysql连接远程数据库的用法

    mysql -u root -p 等这些常用的参数外,你知道多少?来测试一下吧 一,mysql命令行参数 Usage: mysql [OPTIONS] [database]   //命令方式 -?,  ...

  7. AOD.NET实现数据库事物Transaction

    在开始介绍文章主要内容前先简单说一下事务 1.事务介绍 事务是一种机制.是一种操作序列,它包含了一组数据库操作命令,这组命令要么全部执行,要么全部不执行.因此事务是一个不可分割的工作逻辑单元.在数据库 ...

  8. MongoDB数据库基本用法

    show dbs:显示数据库列表  show collections:显示当前数据库中的集合(类似关系数据库中的表)  show users:显示用户 use <db name>:切换当前 ...

  9. Android sqlite管理数据库基本用法

    Android操作系统中内置了sqlite数据库(有关sqlite数据库详细介绍见:http://zh.wikipedia.org/wiki/SQLite),而sqllite本身是一个很小型的数据库, ...

随机推荐

  1. BleedTree动画混合树[Unity]

    Unity在中土大陆的大肆推广能从广泛的中文翻译资料中看出.所以,手册才是王道. 游戏动画中的一个常见任务是在两个或更多相似运动之间混合.最佳的已知示例可能是根据角色速度混合行走和奔跑动画.另一个示例 ...

  2. 【Socket】linux网络多路复用IO技术

      1.mystery引入      1)Select是一种多路复用IO输入输出模式,在linux的输入输出编程中通过select的轮询机制,发现可用/可读或可写的接口.    2)低级socket程 ...

  3. Android下基于SDL的位图渲染(二)理论篇

    理论篇 上一篇中介绍了如何将SDL2源码应用到Android渲染中,实际上SDL本身提供的android-project实现了基于android的c运行时环境,通过上面实践篇的介绍,就是完成这个环境搭 ...

  4. python 创建txt并且写入做追加

    import os def create_str_to_txt(self,date,str_data): """ 创建txt,并且写入 """ ...

  5. 2. AutoEncoder在NLP中的应用

    1. AutoEncoder介绍 2. Applications of AutoEncoder in NLP 3. Recursive Autoencoder(递归自动编码器) 4. Stacked ...

  6. Eigen教程(1)

    整理下Eigen库的教程,参考:http://eigen.tuxfamily.org/dox/index.html 简介 Eigen是C++中可以用来调用并进行矩阵计算的一个库,简单了说它就是一个c+ ...

  7. TCC分布式事务

    https://github.com/changmingxie/tcc-transaction

  8. JDBC插入数据超长时无法自动截断问题

    问题 JDBC操作MySQL数据库,当进行插入或更新操作的数据长度超过表字段的声明最大长度时,会报出以下错误,导致不能正常插入: 但是当直接在MySQL客户端操作时,发现确实可以的,只不过会自动对插入 ...

  9. keras系列︱迁移学习:利用InceptionV3进行fine-tuning及预测、完美案例(五)

    引自:http://blog.csdn.net/sinat_26917383/article/details/72982230 之前在博客<keras系列︱图像多分类训练与利用bottlenec ...

  10. js 日期格式化函数

    直接上代码: // 日期格式化函数 // yyyy/MM/dd hh:mm:ss SSS ⇒ "2017/05/16 09:24:20 850" //"yyyy/M/d ...