/* 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
时间: 2024-10-17 02:08:20