码迷,mamicode.com
首页 > 数据库 > 详细

SQL SET XACT_ABORT各种用法及显示结果

时间:2017-04-29 11:55:36      阅读:337      评论:0      收藏:0      [点我收藏+]

标签:arc   san   not   har   core   reference   logs   回滚   sql   

/*
    SET XACT_ABORT各种用法及显示结果
    
  默认为SET XACT_ABORT OFF,没有事务行为。
    
  SET XACT_ABORT ON分为两种:
 
  1、总体作为一个事务,整体提交或整体回滚,格式为: 
        SET XACT_ABORT ON
        BEGIN TRAN
            --要执行的语句    
        COMMIT TRAN
        GO

  2、每个语句作为一个事务,事务在错误行终止,错误行回滚,错误行之前的不回滚,格式为: 
        SET XACT_ABORT ON
        BEGIN
            --要执行的语句
        END
        GO
*/
 

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
 
---------------测试事务提交------------------

--只回滚错误行,错误行之后的语句还继续执行
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
/*
stuid       score
----------- -----------
101         90
102         78
103         81
104         65
 
(4 row(s) affected)
*/
 
--DELETE FROM dbo.score

--总体做为一个事务,事务终止并全部回滚

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

/*
stuid       score
----------- -----------
(0 row(s) affected)
*/
 
/*
    每个语句作为一个事务,事务在错误行终止,
    错误行回滚,错误行之前的不回滚,
    错误行之后的不执行
*/

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
/*
stuid       score
----------- -----------
101         90
102         78
(2 row(s) affected)
*/

--DROP TABLE score,student

GO
 

  

SQL SET XACT_ABORT各种用法及显示结果

标签:arc   san   not   har   core   reference   logs   回滚   sql   

原文地址:http://www.cnblogs.com/intheway/p/6784657.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!