SQL Server 同一事务:xact_abort 的几种用法

zenglanlan · 2019年07月25日 · 68 次阅读

SET XACT_ABORT ON 分为两种:

  1. 总体作为一个事务,整体提交或整体回滚,格式为:

SET XACT_ABORT ON BEGIN TRAN --要执行的语句 COMMIT TRAN GO

  1. 每个语句作为一个事务,事务在错误行终止,错误行回滚,错误行之前的不回滚,格式为:

SET XACT_ABORT ON BEGIN --要执行的语句 END 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

--事务终止并全部回滚
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
----------- -----------

----事务在错误行终止,错误行回滚,错误行之前的不回滚

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
----------- -----------
101         90
102         78
暂无回复。
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册