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 狀態。適用於 VB6、VBA、ASP 等經典 ADO 開發環境:
| 方法 | 用途 |
|---|---|
BeginTrans | 開啟新交易,之後的異動不會立即寫入資料庫 |
CommitTrans | 認可交易,永久寫入 |
RollbackTrans | 復原交易,捨棄所有未認可變更 |
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
XACT_ABORT 控制伺服器端陳述式級錯誤處理。BeginTrans 控制用戶端連接的交易邊界,跨多個 Execute 呼叫。XACT_ABORT ON 保護單一批次執行。RollbackTrans/ROLLBACK TRAN。TRY...CATCH (SQL 2005+) 取代舊式 @@ERROR 檢查,程式碼更清晰。