[T-SQL] Transaction 用法
Transaction(交易,大陸譯名:事务)
將多個資料庫操作的 SQL 指令 group 成一個執行的單元區塊( a single execution unit ),以特定的字串( Begin Transaction )來標記交易開始,一個交易可能包括了多個資料庫操作指令來完成,交易結束時的動作有兩個,若所有的操作全部執行成功,交易才算成功並提交變更( Commit Transaction ),若當中有發生錯誤失敗,則整個交易宣告失敗並回復所有變更( Rollback Transaction )。
例:
DECLARE @chk tinyint
SET @chk = 0
Begin Transaction [Trans_Name] -- Trans_Name 交易名稱可自訂或者是不寫
-- 可編寫多個 SQL 指令
INSERT INTO [Table_Name] VALUES( 'Field_Value_1' );
IF @@Error <> 0 BEGIN SET @chk = 1 END
INSERT INTO [Table_Name] VALUES( 'Field_Value_2' );
IF @@Error <> 0 BEGIN SET @chk = 1 END
IF @chk <> 0 BEGIN -- 若是新增資料發生錯誤
Rollback Transaction [Trans_Name] -- 復原所有操作所造成的變更
END
ELSE BEGIN
Commit Transaction [Trans_Name] -- 提交所有操作所造成的變更
END
參考資料:
http://www.codeproject.com/Articles/4451/SQL-Server-Transactions-and-Error-Handling
BEGIN TRANSACTION
BEGIN TRY
PRINT @@TRANCOUNT
-- 可編寫多個 SQL 指令
DELETE FROM ...
INSERT INTO ...
INSERT INTO ...
COMMIT TRANSACTION
END TRY
BEGIN CATCH
ROLLBACK TRANSACTION
DECLARE @Msg NVARCHAR(MAX)
SELECT @Msg=ERROR_MESSAGE()
RAISERROR('Error Occured: %s', 20, 101,@msg) WITH LOG -- RAISERROR 是用來將訊息傳回給應用程式,格式與 SQL Server Database Engine 所產生的系統錯誤或警告訊息相同。
END CATCH