2) ROLLBACK:如果事務中出現錯誤,或者使用者決定取消事務,可復原該事務。ROLLBACK 語句通過將資料返回到它在事務開始時所處的狀態,來恢複在該事務中所作的所有修改。ROLLBACK 還會釋放由事務佔用的資源。
3、指定事務邊界
可以用 Transact-SQL 陳述式或 API 函數和方法確定 SQL Server 事務啟動和結束的時間。
1) Transact-SQL 陳述式:使用 BEGIN TRANSACTION、COMMIT TRANSACTION、COMMIT WORK、ROLLBACK TRANSACTION、ROLLBACK WORK 和 SET IMPLICIT_TRANSACTIONS 語句來描述事務。這些語句主要在 DB-Library 應用程式和 Transact-SQL 指令碼(如使用 osql 命令提示工具 + 生產力啟動並執行指令碼)中使用。
2) API 函數和方法:資料庫 API(如 ODBC、OLE DB 和 ADO)包含用來描述事務的函數和方法。它們是 SQL Server 應用程式中用來控制事務的主要機制。
3) 每個事務都必須只由其中的一種方法管理。在同一事務中使用兩種方法可能導致不確定的結果。例如,不應先使用 ODBC API 函數啟動一個事務,再使用 Transact-SQL COMMIT 陳述式完成該事務。這樣將無法通知 SQL Server ODBC 驅動程式該事務已被提交。在這種情況下,應使用 ODBC SQLEndTran 函數結束該事務。
4、交易處理過程中的錯誤
1) 如果伺服器錯誤使事務無法成功完成,SQL Server 將自動復原該事務,並釋放該事務佔用的所有資源。如果用戶端與 SQL Server 的網路連接中斷了,那麼當網路告知 SQL Server 該中斷時,將復原該串連的所有未完成事務。如果用戶端應用程式失敗或客戶電腦崩潰或重啟,也會中斷該串連,而且當網路告知 SQL Server 該中斷時,也會復原所有未完成的串連。如果客戶從該應用程式登出,所有未完成的事務也會被復原。
2) 如果批處理中出現運行時語句錯誤(如違反約束),那麼 SQL Server 中預設的行為將是只復原產生該錯誤的語句。可以使用 SET XACT_ABORT 語句改變該行為。在 SET XACT_ABORT ON 語句執行之後,任何運行時語句錯誤都將導致當前事務自動復原。編譯錯誤(如語法錯誤)不受 SET XACT_ABORT 的影響。