• 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 TRAN
    104     --插入一条数据,会出错!
    105     INSERT INTO 产品(产品ID) VALUES(1)
    106     IF(@@ERROR > 0 OR @@ROWCOUNT <> 1)
    107     BEGIN
    108         ROLLBACK TRAN 嵌套事务    --此时要加上事务保存点的名称
    109     END
    110     ELSE
    111     BEGIN
    112         COMMIT TRAN 嵌套事务    --此时要加上事务保存点的名称
    113     END
    114 --83 rows
    115 SELECT COUNT(1) FROM 产品
    116 --再插入一条数据
    117 INSERT INTO 产品(产品名称,类别ID) VALUES('可乐',1)
    118 --84 rows
    119 SELECT COUNT(1) FROM 产品
    120 IF @@ERROR > 0
    121 BEGIN
    122     TranRollback:
    123         ROLLBACK TRAN
    124 END
    125 ELSE
    126 BEGIN
    127     COMMIT TRAN
    128 END
    129 --84 rows
    130 SELECT COUNT(1) FROM 产品
  • 相关阅读:
    C++ Builder string相互转换(转)
    Delphi中ComPort通信中的数据处理(转)
    GPRS管理与创建APN拨号连接(转)
    Delphi MaskEdit用法(转)
    GPRS DTU概念及DTU的工作原理(转)
    TIdTCPClient 详解
    GPRS的工作原理、主要特点
    Android studio快捷键
    HDU 1255 覆盖的面积(线段树+扫描线)
    Rescue
  • 原文地址:https://www.cnblogs.com/sky-sun/p/4045467.html
Copyright © 2020-2023  润新知