mssql 事务之set xact_abort用法简介


一、set xact_abort功能简介

set xact_abort在mssql sql server中的主要功能是:
1:xact_abort属性主要是设置sql server事务遇错是否自动回滚事务;
2:当我们打开此属性时,此时sql server开启事务运行时,如果运行语句发生错误时, sql server会自动回滚当前事务,并停止sql语句运行。

二、set xact_abort语法简介

SET XACT_ABORT ON    ----开启自动回滚事务
SET XACT_ABORT OFF   ----关闭自动回滚事务 

当SET XACT_ABORT ON 设置为on 时,如果sql语句块运行时,产生错误,则整个sql语句会自动回滚
当SET XACT_ABORT OFF 设置为OFF时,db服务器会根据错误的严重性,自动回滚事务,或者不回滚事务。

三、set xact_abort应用举例

 /*创建表A 和表B 并将表A keyId1设置为表B keyId2的外键*/
CREATE TABLE A   (keyId1 INT NOT NULL PRIMARY KEY);  
CREATE TABLE B    (keyId2 INT NOT NULL REFERENCES A(keyId1));  
GO  
INSERT INTO A VALUES (1);  
INSERT INTO A VALUES (3);  
INSERT INTO A VALUES (4);  
INSERT INTO A VALUES (6);  
GO  
SET XACT_ABORT OFF;   ---关闭XACT_ABORT属性 
GO  
BEGIN TRANSACTION;    ---开启事务
INSERT INTO B VALUES (1);  
INSERT INTO B VALUES (2); ---外键报错  ,此条插入会被回滚,sql语句继续运行  
INSERT INTO B VALUES (3);  
COMMIT TRANSACTION;      ---提交事务  
GO  
SET XACT_ABORT ON;    ---开启XACT_ABORT 属性
GO  
BEGIN TRANSACTION;  
INSERT INTO B VALUES (4);  
INSERT INTO B VALUES (5); --- 外键出错  sql停止运行,并回滚事务
INSERT INTO B VALUES (6);  
COMMIT TRANSACTION;  
GO  
SELECT *    FROM B;    
/*
通过以上开启XACT_ABORT属性,我们可以得到B表存在两行值,
如下图所示
*/
GO