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

XACT_ABORT และ THROW

ลูกค้าที่ร่ำรวยที่สุดของธนาคารที่คุณทำงานอยู่ตัดสินใจบริจาค 0.01% ของ current_balance ให้แก่องค์กรไม่แสวงหากำไร คุณได้รับมอบหมายให้เตรียมสคริปต์สำหรับอัปเดตบัญชีของลูกค้า โดยดำเนินการเฉพาะบัญชีที่มี current_balance มากกว่า $5,000,000 เท่านั้น อย่างไรก็ตาม ผู้อำนวยการธนาคารแจ้งว่าหากมีลูกค้าที่มีคุณสมบัติครบน้อยกว่า 10 ราย ไม่ต้องดำเนินการ เพราะต้องการสัมภาษณ์ลูกค้าเพิ่มเติมก่อน

คุณเตรียมสคริปต์ขึ้นมา และจากหลายวิธีที่ทำได้ คุณเลือกใช้ XACT_ABORT ร่วมกับ THROW เพื่อให้เมื่อจำนวนแถวที่ได้รับผลกระทบมีค่าน้อยกว่าหรือเท่ากับ 10 สามารถโยนข้อผิดพลาดได้ และธุรกรรมจะถูก rollback โดยอัตโนมัติ

แบบฝึกหัดนี้เป็นส่วนหนึ่งของหลักสูตร

Transactions and Error Handling in SQL Server

ดูคอร์ส

คำแนะนำการฝึกหัด

  • ตั้งค่า XACT_ABORT ให้เหมาะสม
  • เริ่มต้นธุรกรรม
  • หากจำนวนแถวที่ได้รับผลกระทบมีค่าน้อยกว่าหรือเท่ากับ 10 ให้โยนข้อผิดพลาดด้วยคำสั่ง THROW โดยระบุหมายเลขเป็น 55000
  • Commit ธุรกรรมหากจำนวนแถวที่ได้รับผลกระทบมากกว่า 10

แบบฝึกหัดเชิงโต้ตอบแบบลงมือทำ

ลองทำแบบฝึกหัดนี้โดยเติมโค้ดตัวอย่างนี้ให้สมบูรณ์

-- Use the appropriate setting
SET XACT_ABORT ___;
-- Begin the transaction
___ ___; 
	UPDATE accounts set current_balance = current_balance - current_balance * 0.01 / 100
		WHERE current_balance > 5000000;
	IF @@ROWCOUNT <= 10	
    	-- Throw the error
		___ ___, 'Not enough wealthy customers!', 1;
	ELSE		
    	-- Commit the transaction
		___ ___; 
แก้ไขและรันโค้ด