LOGO OA教程 ERP教程 模切知识交流 PMS教程 CRM教程 开发文档 其他文档  
 
网站管理员

[点晴永久免费OA]SET XACT_ABORT各种用法及显示结果

Ccoffee
2024年6月17日 15:54 本文热度 947
:SET XACT_ABORT各种用法及显示结果


使用MSSQL事务回滚总结
 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、首先我们创建测试数据库:

 create   database  demo

    2、创建数据表和测试数据:(这里注意外键控制)

 use  demo
 CREATE   TABLE  student
(    
        stuid 
 int   NOT   NULL   PRIMARY   KEY ,
        stuname 
 varchar ( 50 )
)
 CREATE   TABLE  score 
(
        stuid 
 int   NOT   NULL   REFERENCES  student(stuid),
        score 
 int
)
 GO

 INSERT   INTO  student  VALUES  ( 101 , ' zhangsan ' 
 INSERT   INTO  student  VALUES  ( 102 , ' wangwu ' 
 INSERT   INTO  student  VALUES  ( 103 , ' lishi ' 
 INSERT   INTO  student  VALUES  ( 104 , ' maliu ' 

 GO

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

      1、语句1:

 use  demo

 -- Invoking a run-time error
 SET  XACT_ABORT  OFF
 BEGIN   TRAN
    
 INSERT   INTO  score   VALUES  ( 101 , 90 )
    
 INSERT   INTO  score  VALUES  ( 102 , 78 
    
 INSERT   INTO  score  VALUES  ( 107 , 76  /**/ /* Foreign Key Error */  
    
 INSERT   INTO  score  VALUES  ( 103 , 81 
    
 INSERT   INTO  score  VALUES  ( 104 , 65 
 COMMIT   TRAN
 go

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

 -- select * from score
 101      90
 102      78
 103      81
 104      65

 

      2、语句2:

 use  demo

 -- 事务回滚
 SET  XACT_ABORT  on
 BEGIN   TRAN
    
 INSERT   INTO  score   VALUES  ( 101 , 90 )
    
 INSERT   INTO  score  VALUES  ( 102 , 78 
    
 INSERT   INTO  score  VALUES  ( 107 , 76  /**/ /* Foreign Key Error */  
    
 INSERT   INTO  score  VALUES  ( 103 , 81 
    
 INSERT   INTO  score  VALUES  ( 104 , 65 
 COMMIT   TRAN
 go

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

 -- select * from score

      3、语句3:

 use  demo

 -- 事务在错误行终止,错误行回滚,错误行之前的不回滚
 SET  XACT_ABORT  on
 BEGIN
 INSERT   INTO  score   VALUES  ( 101 , 90 )
    
 INSERT   INTO  score  VALUES  ( 102 , 78 
    
 INSERT   INTO  score  VALUES  ( 107 , 76  /**/ /* Foreign Key Error */  
    
 INSERT   INTO  score  VALUES  ( 103 , 81 
    
 INSERT   INTO  score  VALUES  ( 104 , 65 
 END
 go

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

 -- select * from score
 101      90
 102      78

转载于:https://www.cnblogs.com/wdx2008/archive/2007/12/19/1005196.html


该文章在 2024/6/17 15:54:55 编辑过
关键字查询
相关文章
正在查询...
点晴ERP是一款针对中小制造业的专业生产管理软件系统,系统成熟度和易用性得到了国内大量中小企业的青睐。
点晴PMS码头管理系统主要针对港口码头集装箱与散货日常运作、调度、堆场、车队、财务费用、相关报表等业务管理,结合码头的业务特点,围绕调度、堆场作业而开发的。集技术的先进性、管理的有效性于一体,是物流码头及其他港口类企业的高效ERP管理信息系统。
点晴WMS仓储管理系统提供了货物产品管理,销售管理,采购管理,仓储管理,仓库管理,保质期管理,货位管理,库位管理,生产管理,WMS管理系统,标签打印,条形码,二维码管理,批号管理软件。
点晴免费OA是一款软件和通用服务都免费,不限功能、不限时间、不限用户的免费OA协同办公管理系统。
Copyright 2010-2024 ClickSun All Rights Reserved