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 產品
相關文章
相關標籤/搜索