เริ่มต้นใช้งานเริ่มต้นใช้งานได้ฟรี

การตรวจสอบ @@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
  • แก้ไขข้อผิดพลาดในการดำเนินการ
  • ภายใน TRY block ให้ตรวจสอบว่ามี transaction อยู่หรือไม่ แล้ว commit
  • ภายใน CATCH block ให้ตรวจสอบว่ามี 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
แก้ไขและรันโค้ด