SET XACT_ABORT各種用法及顯示結果


默認行為

  默認為SET XACT_ABORT OFF,沒有事務行為。

SET XACT_ABORT ON

  SET XACT_ABORT ON分為兩種:

  1、總體作為一個事務,整體提交或整體回滾,格式為:

SET XACT_ABORT ON
BEGIN TRAN
--要執行的語句
COMMIT TRAN
GO

  2、每個語句作為一個事務,事務在錯誤行終止,錯誤行回滾,錯誤行之前的不回滾,格式為:

SET XACT_ABORT ON
BEGIN
--要執行的語句
END
GO

測試

--創建測試表
use MyDB
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

---------------測試事務提交------------------
use MyDB
--只回滾錯誤行,語句還繼續執行
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)
*/

use MyDB
--事務終止並全部回滾
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)
*/

use MyDB
--事務在錯誤行終止,錯誤行回滾,錯誤行之前的不回滾
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)
*/
版權
作者: 天行健,自強不息

出處:http://artwl.cnblogs.com

本文首發博客園,版權歸作者跟博客園共有。

轉載必須保留本段聲明,並在頁面顯著位置給出本文鏈接,否則保留追究法律責任的權利。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM