文档章节

Sqlserver中事务的写法

ADP大灰狼
 ADP大灰狼
发布于 2014/10/26 10:57
字数 758
阅读 9
收藏 0

SET XACT_ABORT

指定当 Transact-SQL 语句产生运行时错误时,Microsoft? SQL Server? 是否自动回滚当前事务。

语法

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 的设置是在执行或运行时设置,而不是在分析时设置。

1.默认为SET XACT_ABORT OFF 即遇到错误时回滚(真是晕,这不叫回滚,遇到错误当然不能执行了)所以干脆说默认回滚不起作用。
 2.SET XACT_ABORT OFF 
   。。。
  COMMIT TRAN
  这时才是所谓真正的事务,遇到任何错误事务回滚
 3.SET XACT_ABORT OFF 
   。。。
   这时遇到错误时事务回滚,错误前的操作正常

  另@@IDENTITY 系统产销
==============================
理解 @@IDENTITY 

@@IDENTITY 返回最后一个插入 IDENTITY 的值,这些操作包括:INSERT, SELECT INTO,或者 bulk copy。如果在给没有 IDENTITY 列的其他表插入记录,系统将其置为 null。如果有多行记录插入到 IDENTITY 表中,@@IDENTITY 表示最后一个产生的值。如果触发了某个触发器,并且这个触发器执行向另一个带有 IDENTITY 列的表的插入操作,@@IDENTITY 将返回这个由触发器产生的值。如果这个触发器插入的表中不包含 IDENTITY 列,那么 @@IDENTITY 将为 null。如果插入操作失败,@@IDENTITY 值依然会增加,所以 IDENTITY 不保证数据的连续性。

一、各种用法及输出结果:

      1、语句1:

在存储过程中编写正确的事务处理代码(SQL <wbr>Server <wbr>2000 <wbr>& <wbr>2005)use demo
在存储过程中编写正确的事务处理代码(SQL <wbr>Server <wbr>2000 <wbr>& <wbr>2005) 
在存储过程中编写正确的事务处理代码(SQL <wbr>Server <wbr>2000 <wbr>& <wbr>2005) 
--Invoking a run-time error
在存储过程中编写正确的事务处理代码(SQL <wbr>Server <wbr>2000 <wbr>& <wbr>2005) 
SET XACT_ABORT OFF
在存储过程中编写正确的事务处理代码(SQL <wbr>Server <wbr>2000 <wbr>& <wbr>2005) 
BEGIN TRAN
在存储过程中编写正确的事务处理代码(SQL <wbr>Server <wbr>2000 <wbr>& <wbr>2005)     
INSERT INTO score  VALUES (101,90)
在存储过程中编写正确的事务处理代码(SQL <wbr>Server <wbr>2000 <wbr>& <wbr>2005)     
INSERT INTO score VALUES (102,78
在存储过程中编写正确的事务处理代码(SQL <wbr>Server <wbr>2000 <wbr>& <wbr>2005)    
INSERT INTO score VALUES (107,76 
在存储过程中编写正确的事务处理代码(SQL <wbr>Server <wbr>2000 <wbr>& <wbr>2005)     
INSERT INTO score VALUES (103,81
在存储过程中编写正确的事务处理代码(SQL <wbr>Server <wbr>2000 <wbr>& <wbr>2005)     
INSERT INTO score VALUES (104,65
在存储过程中编写正确的事务处理代码(SQL <wbr>Server <wbr>2000 <wbr>& <wbr>2005) 
COMMIT TRAN
在存储过程中编写正确的事务处理代码(SQL <wbr>Server <wbr>2000 <wbr>& <wbr>2005) 
go

      结果1:只回滚错误行,语句还继续执行。

在存储过程中编写正确的事务处理代码(SQL <wbr>Server <wbr>2000 <wbr>& <wbr>2005)--select * from score
在存储过程中编写正确的事务处理代码(SQL <wbr>Server <wbr>2000 <wbr>& <wbr>2005) 
101    90
在存储过程中编写正确的事务处理代码(SQL <wbr>Server <wbr>2000 <wbr>& <wbr>2005) 
102    78
在存储过程中编写正确的事务处理代码(SQL <wbr>Server <wbr>2000 <wbr>& <wbr>2005) 
103    81
在存储过程中编写正确的事务处理代码(SQL <wbr>Server <wbr>2000 <wbr>& <wbr>2005) 
104    65

      2、语句2:

在存储过程中编写正确的事务处理代码(SQL <wbr>Server <wbr>2000 <wbr>& <wbr>2005)use demo
在存储过程中编写正确的事务处理代码(SQL <wbr>Server <wbr>2000 <wbr>& <wbr>2005) 
在存储过程中编写正确的事务处理代码(SQL <wbr>Server <wbr>2000 <wbr>& <wbr>2005) 
--事务回滚
在存储过程中编写正确的事务处理代码(SQL <wbr>Server <wbr>2000 <wbr>& <wbr>2005) 
SET XACT_ABORT on
在存储过程中编写正确的事务处理代码(SQL <wbr>Server <wbr>2000 <wbr>& <wbr>2005) 
BEGIN TRAN
在存储过程中编写正确的事务处理代码(SQL <wbr>Server <wbr>2000 <wbr>& <wbr>2005)     
INSERT INTO score  VALUES (101,90)
在存储过程中编写正确的事务处理代码(SQL <wbr>Server <wbr>2000 <wbr>& <wbr>2005)     
INSERT INTO score VALUES (102,78
在存储过程中编写正确的事务处理代码(SQL <wbr>Server <wbr>2000 <wbr>& <wbr>2005)    
INSERT INTO score VALUES (107,76 
在存储过程中编写正确的事务处理代码(SQL <wbr>Server <wbr>2000 <wbr>& <wbr>2005)     
INSERT INTO score VALUES (103,81
在存储过程中编写正确的事务处理代码(SQL <wbr>Server <wbr>2000 <wbr>& <wbr>2005)     
INSERT INTO score VALUES (104,65
在存储过程中编写正确的事务处理代码(SQL <wbr>Server <wbr>2000 <wbr>& <wbr>2005) 
COMMIT TRAN
在存储过程中编写正确的事务处理代码(SQL <wbr>Server <wbr>2000 <wbr>& <wbr>2005) 
go

      结果2:事务终止并全部回滚,结果为空。

在存储过程中编写正确的事务处理代码(SQL <wbr>Server <wbr>2000 <wbr>& <wbr>2005)--select * from score
在存储过程中编写正确的事务处理代码(SQL <wbr>Server <wbr>2000 <wbr>& <wbr>2005)

      3、语句3:

在存储过程中编写正确的事务处理代码(SQL <wbr>Server <wbr>2000 <wbr>& <wbr>2005)use demo
在存储过程中编写正确的事务处理代码(SQL <wbr>Server <wbr>2000 <wbr>& <wbr>2005) 
在存储过程中编写正确的事务处理代码(SQL <wbr>Server <wbr>2000 <wbr>& <wbr>2005) 
--事务在错误行终止,错误行回滚,错误行之前的不回滚
在存储过程中编写正确的事务处理代码(SQL <wbr>Server <wbr>2000 <wbr>& <wbr>2005) 
SET XACT_ABORT on
在存储过程中编写正确的事务处理代码(SQL <wbr>Server <wbr>2000 <wbr>& <wbr>2005) 
BEGIN
在存储过程中编写正确的事务处理代码(SQL <wbr>Server <wbr>2000 <wbr>& <wbr>2005) 
INSERT INTO score  VALUES (101,90)
在存储过程中编写正确的事务处理代码(SQL <wbr>Server <wbr>2000 <wbr>& <wbr>2005)     
INSERT INTO score VALUES (102,78
在存储过程中编写正确的事务处理代码(SQL <wbr>Server <wbr>2000 <wbr>& <wbr>2005)    
INSERT INTO score VALUES (107,76 
在存储过程中编写正确的事务处理代码(SQL <wbr>Server <wbr>2000 <wbr>& <wbr>2005)     
INSERT INTO score VALUES (103,81
在存储过程中编写正确的事务处理代码(SQL <wbr>Server <wbr>2000 <wbr>& <wbr>2005)     
INSERT INTO score VALUES (104,65
在存储过程中编写正确的事务处理代码(SQL <wbr>Server <wbr>2000 <wbr>& <wbr>2005) 
END
在存储过程中编写正确的事务处理代码(SQL <wbr>Server <wbr>2000 <wbr>& <wbr>2005) 
go

      结果3:出现这种是因为系统把每个insert语句都看成是单独的事务,所以错误行以前的是不回滚的。

在存储过程中编写正确的事务处理代码(SQL <wbr>Server <wbr>2000 <wbr>& <wbr>2005)--select * from score
在存储过程中编写正确的事务处理代码(SQL <wbr>Server <wbr>2000 <wbr>& <wbr>2005) 
101    90
在存储过程中编写正确的事务处理代码(SQL <wbr>Server <wbr>2000 <wbr>& <wbr>2005) 
102    78


本文转载自:http://fsmwhk.blog.163.com/blog/static/1951491382012484957114/

共有 人打赏支持
ADP大灰狼
粉丝 9
博文 13
码字总数 3192
作品 0
唐山
程序员
私信 提问
PHP 对 mysql 的事务处理

mysql>mysql事务处理php代码实现事务的处理可以通过PHP预定义类mysqli的以下方法实现。 autocommit(boolean):该方法用于限定查询结果是否自动提交,如果该方法的参数为true则自动提交,如果...

罗春宗
2012/10/31
0
0
Sql server 2000 连接测试

Sql server 2000 数据库本身规定了其数据库连接URL 的一般格式,如下: jdbc:sqlserver://[serverName[instanceName][:portNumber]][;property=value[;property=value]] 之间无空格,其中: ...

finereport
2011/12/12
0
0
小觑数据库(SqlServer)查询语句执行过程

近年来,越来越多的NoSql产品不断的以技术革命的者的身份跳出来:"你看哥是多么的快,你们关型型数据库真是战五渣阿"。是的,高性能的场景下NoSql真的很出彩。而我们关系型数据库只能在墙角哭...

Yunanw
2014/04/14
0
4
Firebird 数据库使用经验总结

最近在改写一段ms sql的存储过程到firebird,总结了一些经验,firebird可以说是这个世界上最小的支持存储过程的数据库,才2.3M 而已。如果做小型的应用,相比ms sql桌面版有70多M(+sp3),m...

鉴客
2010/05/18
8.6K
3
SQLserver 关键字作列名

在用 Informatica 从 SQLserver 中抽取数据时碰到这样一个错误: 实际上,这是一个非常简单的 mapping,从源表直抽数据至目标表,没有转换逻辑: 从 Monitor 的 session log 中获取详细的 in...

DreamOver
2018/06/07
0
0

没有更多内容

加载失败,请刷新页面

加载更多

指针数组和数组指针的区别

这两个名字不同当然所代表的意思也就不同。我刚开始看到这就吓到了,主要是中文太博大精深了,整这样的简称太专业了,把人都绕晕了。从英文解释或中文全称看就比较容易理解。 指针数组:arr...

天王盖地虎626
33分钟前
1
0
Qt那些事0.0.18

今天要记一下Qt中的Resource。自我感觉理解的不错,但是还会难免有谬误,在日后有可能会更新,也有可能不会。 小声的念叨一句,女人心,海底针。 今天就直接跳过了关于QML在qrc文件中的介绍,...

Ev4n
41分钟前
1
0
深入解析js的作用域、预解析机制

虽然,ES6在我们工作中应用得越来越广泛,但是还是很多项目保留着ES5的写法,所以,今天,带着大家重新巩固下ES5下的作用域及预解析机制。 概念: 作用域:域,指的是一个空间、范围、区域,...

前端攻城老湿
44分钟前
1
0
Spring Cloud Feign - 声明式 REST Client

1、Feign是什么 声明式REST client,来自NetFlix。 允许你编写无实现代码调用REST services 替换RestTemplate(甚至更简单) Spring Cloud 为使用Feign提供了包装器 2、怎样使用Feign 对比:...

Benz001
49分钟前
3
0
前端、后端和全栈到底不该学什么

1、前言 在职业规划咨询过程中经常会被问到这样的问题: 老师,我是该深入钻研专精一门,走技术大牛路线,还是所有都要精通,做一个全栈工程师? 类似问题的变种还有,老师我是不是该30岁最迟...

前端攻城小牛
51分钟前
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部