發生錯誤時回復交易
第一天上班,你接到的任務是設定銀行內部在款項轉帳時要記錄的交易。
你想先準備一個簡單的指令碼,將 $100 從 account_id = 1 轉到 account_id = 5。接著,將這些異動寫入 transactions 資料表。你覺得自己都寫對了,但身為謹慎的工作者,你還是想再確認一次!
事實上,你的確犯了錯。你沒有替帳號 5 新增交易,卻誤插入到帳號 500,而那個帳號根本不存在。
為了避免未來再出錯,你寫的指令碼應在發生錯誤時將所有變更「回復(rollback)」。如果一切正常,則應提交(commit)交易。
本練習屬於課程
SQL Server 的交易與錯誤處理
練習說明
- 開始交易。
- 更正操作中的錯誤。
- 若沒有錯誤就提交交易。
- 在
CATCH區塊中回復交易。
動手互動練習
試著完成這個範例程式碼,體驗一下這個練習。
BEGIN TRY
-- Begin the transaction
BEGIN ___;
UPDATE accounts SET current_balance = current_balance - 100 WHERE account_id = 1;
INSERT INTO transactions VALUES (1, -100, GETDATE());
UPDATE accounts SET current_balance = current_balance + 100 WHERE account_id = 5;
-- Correct it
INSERT INTO transactions VALUES (500, 100, GETDATE());
-- Commit the transaction
___ TRAN;
END TRY
BEGIN CATCH
SELECT 'Rolling back the transaction';
-- Rollback the transaction
___ ___;
END CATCH