数据库事物用法 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
在上面代码中,我遇到的问题是:语句二出错,语句一仍然执行,语句三不执行,本以为添加了事物控制就能全部回滚,后来查了资料才知道需要加上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的更多相关文章
- 数据库事物四大特性-ACID
事务的:原子性.一致性.分离性.持久性 事物(transaction)是由一些列操作序列构成的执行单元,这些单元要么都做,要么不做,是一个不可分割的工作单元. 数据库事物的四个基本性质(ACID) 1 ...
- Spring中的数据库事物管理
Spring中的数据库事物管理 只要给方法加一个@Transactional注解就可以了 例如:
- 数据库事物 jdbc事物 spring事物 隔离级别:脏幻不可重复读
1.数据库事物: 事物的概念 a给b打100块钱的例子 2.jdbc事物: 通过下面代码实现 private Connection conn = null; private PreparedState ...
- spring boot redis 数据库缓存用法
缓存处理方式应该是 1.先从缓存中拿数据,如果有,直接返回.2.如果拿到的为空,则数据库查询,然后将查询结果存到缓存中.由此实现方式应该如下: private String baseKey = &qu ...
- Spring+Mybatis+SpringMVC+Atomikos多数据源共存+不同数据库事物一致性处理
网上找了一大堆的例子,没一个跑通的,都是copy转发,哎,整理得好辛苦..做个笔记,方便正遇到此问题的猿们能够得到帮助....废话不多说,贴代码..... 项目结构说明: 1.dao层的admin.w ...
- mysql连接远程数据库的用法
mysql -u root -p 等这些常用的参数外,你知道多少?来测试一下吧 一,mysql命令行参数 Usage: mysql [OPTIONS] [database] //命令方式 -?, ...
- AOD.NET实现数据库事物Transaction
在开始介绍文章主要内容前先简单说一下事务 1.事务介绍 事务是一种机制.是一种操作序列,它包含了一组数据库操作命令,这组命令要么全部执行,要么全部不执行.因此事务是一个不可分割的工作逻辑单元.在数据库 ...
- MongoDB数据库基本用法
show dbs:显示数据库列表 show collections:显示当前数据库中的集合(类似关系数据库中的表) show users:显示用户 use <db name>:切换当前 ...
- Android sqlite管理数据库基本用法
Android操作系统中内置了sqlite数据库(有关sqlite数据库详细介绍见:http://zh.wikipedia.org/wiki/SQLite),而sqllite本身是一个很小型的数据库, ...
随机推荐
- Spark中groupBy groupByKey reduceByKey的区别
groupBy 和SQL中groupby一样,只是后面必须结合聚合函数使用才可以. 例如: hour.filter($"version".isin(version: _*)).gr ...
- 如何从dll文件导出对应的lib文件?
[时间:2016-05] [状态:Open] 引言 近期由于不再使用vs生成lib,考虑使用windows下gcc生成一个动态库,供第三方调用,发现编译之后只有dll,lib如何处理? 好吧,这就是本 ...
- Mac git pull失败,最新操作系统导致 SSH issues with Mac OS X High Sierra
Mac 升级到最新操作系统ssh加密方式和gitlub不一样,导致不能git pull 如:mac是md5加密方式,gitlut是aes-256-cbc加密方式 解决方法如下 A coworker ...
- [转]layDate显示默认时间
原文地址:https://blog.csdn.net/u011870547/article/details/72540074 jsp: <div class="form-group&q ...
- valgrind--CPP程序内存泄露检查工具
内存泄漏是c++程序常见的问题了,特别是服务类程序,当系统模块过多或者逻辑复杂后,很难通过代码看出内存泄漏. valgrind是一个开源的,检测c++程序内存泄漏有效工具,编译时加上-g选项可以定位到 ...
- Java编程的逻辑 (60) - 随机读写文件及其应用 - 实现一个简单的KV数据库
本系列文章经补充和完善,已修订整理成书<Java编程的逻辑>,由机械工业出版社华章分社出版,于2018年1月上市热销,读者好评如潮!各大网店和书店有售,欢迎购买,京东自营链接:http:/ ...
- php 验证码代码
1.js代码 function fleshVerify(type){ //重载验证码 var timenow = new Date().getTime(); if (type) { $('verify ...
- golang sqrt error练习
练习:错误 从先前的练习中复制 Sqrt 函数,并修改使其返回 error 值. 由于不支持复数,当 Sqrt 接收到一个负数时,应当返回一个非 nil 的错误值. 创建一个新类型 type Er ...
- aps.net MVC view 判断方法
两种方式 1.使用Razor 视图 新建app_code文件夹(在这个目录下ShowHelper.cshtml会自动编译成类,方法必须都是静态的) @functions{ //是否显 public s ...
- update更新另一个字段
1. 写法轻松,更新效率高:update table1 set field1=table2.field1,field2=table2.field2from table2where table1.id= ...