1. 程式人生 > >sqlserver中事務總結:begin tran,rollback tran,commit tran SQL事務用法begin tran,commit tran和rollback tran的用法

sqlserver中事務總結:begin tran,rollback tran,commit tran SQL事務用法begin tran,commit tran和rollback tran的用法

 第1個相關用法:摘自:https://shiyousan.com/post/f13d29b7-0d87-4168-bd8b-8b28b0991b5a

以下是出現錯誤的SQL部分語句:

 

此錯誤的原因是由於一個事務只能對應一個操作,要麼回滾要麼提交,所以執行了ROLLBACK TRAN語句後一定不能再執行COMMIT TRAN語句!!!而無論是回滾事務還是提交事務,都是不會中斷SQL處理流程的,要想中斷流程就需要使用RETURN語句。

上面範例中的語句先執行了ROLLBACK TRAN回滾操作(這裡造成事務已經處理完成),但是並沒有中斷流程,所以後面的語句依然會繼續執行。執行過程中由於沒有任何異常錯誤,最終導致重複執行了底部的COMMIT TRAN事務提交操作,最後一次事務操作沒有找到相匹配的事務宣告,就會提示"COMMIT TRANSACTION(事務提交) 請求沒有對應的 BEGIN TRANSACTION(事務宣告)"這個錯誤。

所以要跳出事務,在進行回滾ROLLBACK操作後,還必須馬上使用RETURN語句跳出執行流程。以下為修改後的語句:

這裡在做一個簡單測試,有助於理解所謂的一個事務只能對應一個事務操作的意思,在SQL中輸入下圖的三行程式碼並執行:

總結: roolback 之後不能再次commit,事務只能開啟一個!!!

 

第2個用法總結:https://www.cnblogs.com/accumulater/p/6089822.html

 

SQL事務用法begin tran,commit tran和rollback tran的用法

 

Sql Server 2005/2008中提供了begin tran,commit tran和rollback tran來使用事務。

begin tran表示開始事務,

commit tran表示提交事務,

rollback tran表示回滾事物

 

 EXEC TEST_PROC '文綜','包括歷史,地理,政治','政治','文綜的一門' 
CREATE PROCEDURE [dbo].[TEST_PROC] 
@A_Name NVARCHAR(20), -- A表姓名 
@A_Remark NVARCHAR(4000), -- A表備註 
@B_Name NVARCHAR(20), -- B表姓名 
@B_Remark NVARCHAR(4000) -- B表備註 
AS 
BEGIN TRY 
BEGIN TRAN 
-- 在A表中插入資料 
INSERT INTO [dbo].[A] 
( [A_Name] 
, [A_Remark] ) 
VALUES 
( @A_Name 
, @A_Remark ) 
-- 在B表中插入資料 
INSERT INTO [dbo].[B] 
( [A_ID] 
, [B_Name] 
, [B_Remark] ) 
VALUES 
( @@IDENTITY -- 返回最後插入的標識值 
, @B_Name 
, @B_Remark ) 
COMMIT TRAN 
END TRY 
BEGIN CATCH 
ROLLBACK TRAN 
INSERT INTO [dbo].[ErrorLog] 
( [EL_Procedure] -- 異常儲存過程名稱 
, [EL_OperateTime] ) -- 報異常時間 
VALUES 
( 'TEST_PROC' 
, CONVERT(DATETIME,GETDATE(),20) ) 
END CATCH 

 

注:1. @@IDENTITY的作用是返回最後插入的標識值。 
2. 我在rollback tran中加入一個專門記錄異常的表,以便產於異常發生的時間和確定報異常的儲存過程的名稱。 
原文連結: 
begin tran 可以理解成新建一個還原點。 
commit tran提交這個自begin tran開始的修改 
rollback tran 表示還原到上個還原點

 

 

 

 

Sql Server 2005/2008中提供了begin tran,commit tran和rollback tran來使用事務。

begin tran表示開始事務,

commit tran表示提交事務,

rollback tran表示回滾事物

 

 EXEC TEST_PROC '文綜','包括歷史,地理,政治','政治','文綜的一門' 
CREATE PROCEDURE [dbo].[TEST_PROC] 
@A_Name NVARCHAR(20), -- A表姓名 
@A_Remark NVARCHAR(4000), -- A表備註 
@B_Name NVARCHAR(20), -- B表姓名 
@B_Remark NVARCHAR(4000) -- B表備註 
AS 
BEGIN TRY 
BEGIN TRAN 
-- 在A表中插入資料 
INSERT INTO [dbo].[A] 
( [A_Name] 
, [A_Remark] ) 
VALUES 
( @A_Name 
, @A_Remark ) 
-- 在B表中插入資料 
INSERT INTO [dbo].[B] 
( [A_ID] 
, [B_Name] 
, [B_Remark] ) 
VALUES 
( @@IDENTITY -- 返回最後插入的標識值 
, @B_Name 
, @B_Remark ) 
COMMIT TRAN 
END TRY 
BEGIN CATCH 
ROLLBACK TRAN 
INSERT INTO [dbo].[ErrorLog] 
( [EL_Procedure] -- 異常儲存過程名稱 
, [EL_OperateTime] ) -- 報異常時間 
VALUES 
( 'TEST_PROC' 
, CONVERT(DATETIME,GETDATE(),20) ) 
END CATCH 

 

注:1. @@IDENTITY的作用是返回最後插入的標識值。 
2. 我在rollback tran中加入一個專門記錄異常的表,以便產於異常發生的時間和確定報異常的儲存過程的名稱。 
原文連結: 
begin tran 可以理解成新建一個還原點。 
commit tran提交這個自begin tran開始的修改 
rollback tran 表示還原到上個還原點