การตรวจสอบ @@TRANCOUNT ใน TRY...CATCH
เจ้าของบัญชีหมายเลข 10 ได้รับรางวัลจากการจับฉลากและจะได้รับเงิน $200 คุณเตรียมสคริปต์สั้น ๆ เพื่อเพิ่มเงิน $200 นั้นใน current_balance ของบัญชีหมายเลข 10 แม้คิดว่าเขียนโค้ดได้ถูกต้องแล้ว แต่ยังอยากตรวจสอบให้มั่นใจอีกครั้ง
ที่จริงแล้ว มีข้อผิดพลาดเล็กน้อยในส่วนที่เพิ่มเงิน ได้แก่ SET current_balance = 'current_balance' + 200 ซึ่งเขียน 'current_balance' เป็น string ทำให้เกิด error ขึ้น
สคริปต์ที่สร้างควร rollback การเปลี่ยนแปลงทั้งหมดหากเกิด error โดยตรวจสอบว่ามี transaction ที่เปิดอยู่หรือไม่ หากทุกอย่างเป็นไปด้วยดี ก็ให้ commit transaction โดยตรวจสอบว่ามี transaction ที่เปิดอยู่เช่นเดียวกัน
แบบฝึกหัดนี้เป็นส่วนหนึ่งของหลักสูตร
Transactions and Error Handling in SQL Server
คำแนะนำการฝึกหัด
- เริ่มต้น transaction
- แก้ไขข้อผิดพลาดในการดำเนินการ
- ภายใน
TRYblock ให้ตรวจสอบว่ามี transaction อยู่หรือไม่ แล้ว commit - ภายใน
CATCHblock ให้ตรวจสอบว่ามี transaction อยู่หรือไม่ แล้ว roll back
แบบฝึกหัดเชิงโต้ตอบแบบลงมือทำ
ลองทำแบบฝึกหัดนี้โดยเติมโค้ดตัวอย่างนี้ให้สมบูรณ์
BEGIN TRY
-- Begin the transaction
___ ___;
-- Correct the mistake
UPDATE accounts SET current_balance = 'current_balance' + 200
WHERE account_id = 10;
-- Check if there is a transaction
IF ___ > 0
-- Commit the transaction
___ ___;
SELECT * FROM accounts
WHERE account_id = 10;
END TRY
BEGIN CATCH
SELECT 'Rolling back the transaction';
-- Check if there is a transaction
IF ___ > 0
-- Rollback the transaction
___ ___;
END CATCH