[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


arrow
arrow
    文章標籤
    sql
    全站熱搜

    伊 發表在 痞客邦 留言(0) 人氣()