首页 > 代码库 > SqlCollections - 事务

SqlCollections - 事务

  1 --==============================事务===============================  2 --简单的事务  3 --Messages:1 2 4 6  4 print 1  5 --事务开始  6 BEGIN TRAN  7   8 --插入一条数据  9 INSERT INTO 类别(类别名称) 10 VALUES (bbb) 11 IF(@@ERROR > 0 OR @@ROWCOUNT <> 1)    --@@ERROR = 0代表正常,否则出错 12 GOTO TranRollBack 13  14 print 2 15  16 --插入一条数据 17 --已经有了aaa,会出错! 18 INSERT INTO 类别(类别名称) 19 VALUES (aaa) 20 IF(@@ERROR > 0 OR @@ROWCOUNT <> 1)     21 GOTO TranRollBack 22  23 PRINT 3 24  25 --插入一条数据 26 INSERT INTO 类别(类别名称) 27 VALUES (ccc) 28  29 IF(@@ERROR > 0) 30 BEGIN 31     TranRollBack: 32         PRINT 4 33         --回滚事务 34         ROLLBACK TRAN 35 END 36 ELSE 37 BEGIN 38     PRINT 5 39     --提交事务 40     COMMIT TRAN 41 END 42  43 print 6 44  45 --嵌套事务 46 --由于事务的原子性,事务内的所有语句要么全部执行,要么全部不执行,所以内层的COMMIT是没有意义的,仅仅是内层事务结束的标志 47 --内层事务若触发ROLLBACK,会回滚到外层事务之前的状态,而不是内层事务开始时的状态! 48 --82 rows 49 SELECT COUNT(1) FROM 产品 50 --开始事务 51 BEGIN TRAN 52 --插入一条数据 53 INSERT INTO 产品(产品名称,类别ID) VALUES(西瓜汁,1) 54 IF(@@ERROR > 0 OR @@ROWCOUNT <> 1) 55     GOTO TranRollback 56 --83 rows 57 SELECT COUNT(1) FROM 产品 58 --嵌套事务 59     BEGIN TRAN 60     --插入一条数据,会出错! 61     INSERT INTO 产品(产品ID) VALUES(1) 62     IF(@@ERROR > 0 OR @@ROWCOUNT <> 1) 63     BEGIN 64         ROLLBACK TRAN 65     END 66     ELSE 67     BEGIN 68         COMMIT TRAN 69     END 70 --82 rows 71 SELECT COUNT(1) FROM 产品 72 --再插入一条数据 73 INSERT INTO 产品(产品名称,类别ID) VALUES(可乐,1) 74 --83 rows 75 SELECT COUNT(1) FROM 产品 76 IF @@ERROR > 0 77 BEGIN 78     TranRollback: 79         ROLLBACK TRAN 80 END 81 ELSE 82 BEGIN 83     COMMIT TRAN 84 END 85 --83 rows 86 SELECT COUNT(1) FROM 产品 87  88 --事务保存点 89 --使用事务保存点,可以在内层事务回滚时只回滚到该内层事务的开始状态,从而可以实现有选择的回滚一部分 90 --82 rows 91 SELECT COUNT(1) FROM 产品 92 --开始事务 93 BEGIN TRAN 94 --插入一条数据 95 INSERT INTO 产品(产品名称,类别ID) VALUES(西瓜汁,1) 96 IF(@@ERROR > 0 OR @@ROWCOUNT <> 1) 97     GOTO TranRollback 98 --83 rows 99 SELECT COUNT(1) FROM 产品100 --嵌套事务101     --保存事务位置102     SAVE TRAN 嵌套事务103     BEGIN TRAN104     --插入一条数据,会出错!105     INSERT INTO 产品(产品ID) VALUES(1)106     IF(@@ERROR > 0 OR @@ROWCOUNT <> 1)107     BEGIN108         ROLLBACK TRAN 嵌套事务    --此时要加上事务保存点的名称109     END110     ELSE111     BEGIN112         COMMIT TRAN 嵌套事务    --此时要加上事务保存点的名称113     END114 --83 rows115 SELECT COUNT(1) FROM 产品116 --再插入一条数据117 INSERT INTO 产品(产品名称,类别ID) VALUES(可乐,1)118 --84 rows119 SELECT COUNT(1) FROM 产品120 IF @@ERROR > 0121 BEGIN122     TranRollback:123         ROLLBACK TRAN124 END125 ELSE126 BEGIN127     COMMIT TRAN128 END129 --84 rows130 SELECT COUNT(1) FROM 产品

 

SqlCollections - 事务