首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

SQL Server 交易控制核心:ROLLBACK、XACT_ABORT 與 ADO 連接物件事務管理

     編輯:關於SqlServer

T-SQL 交易控制陳述式

SET XACT_ABORT ON;  -- 遇到執行錯誤自動回滾整個交易
GO
BEGIN TRAN;
    INSERT INTO A VALUES (4);
    INSERT INTO B VALUES (5);
COMMIT TRAN;
  • SET XACT_ABORT ON:強烈建議在預存程序開啟時設定。預設 OFF 時,某些錯誤 (如轉換溢位) 僅終止當前陳述式,交易仍可繼續,易導致資料不一致。
  • BEGIN TRAN:標示交易起始點。
  • COMMIT TRAN:確認提交所有變更。
  • ROLLBACK TRAN:撤銷回到 BEGIN TRAN 狀態。

ADO 連接物件交易管理方法

適用於 VB6、VBA、ASP 等經典 ADO 開發環境:

方法用途
BeginTrans開啟新交易,之後的異動不會立即寫入資料庫
CommitTrans認可交易,永久寫入
RollbackTrans復原交易,捨棄所有未認可變更

VB6 程式碼範例

Dim cn As New ADODB.Connection
cn.Open "Provider=SQLOLEDB;Data Source=.;Initial Catalog=TestDB;Integrated Security=SSPI"

On Error GoTo ErrHandler
cn.BeginTrans
    cn.Execute "INSERT INTO Table1 (Col1) VALUES ('A')"
    cn.Execute "INSERT INTO Table2 (Col2) VALUES ('B')"
cn.CommitTrans
Exit Sub

ErrHandler:
    If cn.State = adStateOpen Then cn.RollbackTrans
    MsgBox "交易失敗已回滾: " & Err.Description

關鍵行為差異

  • T-SQL XACT_ABORT 控制伺服器端陳述式級錯誤處理。
  • ADO BeginTrans 控制用戶端連接的交易邊界,跨多個 Execute 呼叫。
  • 兩者可搭配使用:ADO 管理業務邏輯交易範圍,預存程序內部設定 XACT_ABORT ON 保護單一批次執行。

最佳實務

  1. 盡量縮短交易持續時間,避免長時間鎖定資源。
  2. 錯誤處理區塊務必包含 RollbackTrans/ROLLBACK TRAN。
  3. 避免在交易中呼叫外部資源 (Web Service、檔案 I/O),若失敗難以補償。
  4. 使用 TRY...CATCH (SQL 2005+) 取代舊式 @@ERROR 檢查,程式碼更清晰。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved