先講下事務執行流程: BEGIN和COMMIT 結果: ROLLBACK 結果: 由上可知BEGIN TRAN 開始事務,使事務數量加一 COMMIT TRAN 使事務減一,提交最新開闢的事務 ROLLBACK 使事務數量直接減為0,也就是回滾 事務分類: 1.顯示事務 2.隱式事務模式 3.自動提 ...
先講下事務執行流程:
BEGIN和COMMIT
PRINT @@TRANCOUNT --@@TRANCOUNT統計事務數量
BEGIN TRAN PRINT @@TRANCOUNT BEGIN TRAN PRINT @@TRANCOUNT COMMIT TRAN --只提交一個事務 PRINT @@TRANCOUNT COMMIT TRAN PRINT @@TRANCOUNT
結果:
ROLLBACK
PRINT @@TRANCOUNT BEGIN TRAN PRINT @@TRANCOUNT BEGIN TRAN PRINT @@TRANCOUNT ROLLBACK TRAN --回滾所有事務 PRINT @@TRANCOUNT
結果:
由上可知BEGIN TRAN 開始事務,使事務數量加一
COMMIT TRAN 使事務減一,提交最新開闢的事務
ROLLBACK 使事務數量直接減為0,也就是回滾
事務分類:
1.顯示事務
2.隱式事務模式
3.自動提交事務
--顯示事務
SET NOCOUNT ON SET IMPLICIT_TRANSACTIONS OFF --設置為顯示事務模式,也就是自動提交模式 PRINT '顯示事務開始前:'+CAST(@@TRANCOUNT AS varchar(10)) GO IF EXISTS(SELECT *FROM sys.tables WHERE name='Table1') DROP TABLE Table1 CREATE TABLE Table1 ( col1 int ) GO INSERT INTO Table1 VALUES(1) PRINT '插入數據時事務數:'+CAST(@@TRANCOUNT AS varchar(10)) BEGIN TRAN PRINT '開始事務時的事務數:'+CAST(@@TRANCOUNT AS varchar(10)) COMMIT TRAN GO PRINT '提交事務後的事務數:'+ CAST(@@TRANCOUNT AS varchar(10)) GO
結果:
--隱式事務模式
SET IMPLICIT_TRANSACTIONS ON --打開隱式事務模式 INSERT INTO Table1 VALUES(2) INSERT INTO Table1 VALUES(2) PRINT '插入數據時事務數:'+CAST(@@TRANCOUNT AS varchar(10)) COMMIT TRAN --如果不顯示提交事務,那麼如果下一條語句是(INSERT,DELECT,UPDATE,CREATE,TRUNCAST TABLE ,所有DROP,ALTER TABLE,GRINT,REVOK,SELECT)就會自動新建一個事務 PRINT '提交隱式事務後的事務數:'+CAST(@@TRANCOUNT AS varchar(10)) GO
結果:
--自動提交事務
--當設置IMPLICIY_TRANSACTIONS OFF 就恢復為自動提交模式 SET IMPLICIT_TRANSACTIONS OFF GO INSERT INTO Table1 VALUES(3) --沒有錯誤自動提交 PRINT @@TRANCOUNT INSERT INTO Table1 VALUES(3,3) --有錯誤自動回滾 PRINT @@TRANCOUNT
結果:
--沒有錯誤自動提交
--有錯誤自動回滾