การ Rollback ทรานแซกชันเมื่อเกิดข้อผิดพลาด
ในวันแรกของการทำงาน คุณได้รับมอบหมายให้ตั้งค่าทรานแซกชันที่บันทึกการโอนเงินในระบบธนาคาร
คุณต้องการเขียนสคริปต์อย่างง่ายเพื่อโอนเงิน $100 จาก account_id = 1 ไปยัง account_id = 5 จากนั้นบันทึกรายการเคลื่อนไหวเหล่านั้นลงในตาราง transactions คุณคิดว่าเขียนทุกอย่างถูกต้องแล้ว แต่ด้วยความรอบคอบ จึงอยากตรวจสอบอีกครั้ง!
ปรากฏว่ามีข้อผิดพลาดเกิดขึ้นจริง แทนที่จะแทรกทรานแซกชันใหม่สำหรับ account 5 กลับแทรกเป็น account 500 ซึ่งไม่มีอยู่ในระบบ
เพื่อป้องกันข้อผิดพลาดในอนาคต สคริปต์ที่สร้างขึ้นควร rollback การเปลี่ยนแปลงทั้งหมดหากเกิดข้อผิดพลาด แต่หากทุกอย่างเป็นไปด้วยดี ทรานแซกชันก็ควร commit
แบบฝึกหัดนี้เป็นส่วนหนึ่งของหลักสูตร
Transactions and Error Handling in SQL Server
คำแนะนำการฝึกหัด
- เริ่มต้นทรานแซกชัน
- แก้ไขข้อผิดพลาดในการดำเนินการ
- Commit ทรานแซกชันหากไม่มีข้อผิดพลาด
- ภายในบล็อก
CATCHให้ Rollback ทรานแซกชัน
แบบฝึกหัดเชิงโต้ตอบแบบลงมือทำ
ลองทำแบบฝึกหัดนี้โดยเติมโค้ดตัวอย่างนี้ให้สมบูรณ์
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