Section 6: Lab: จัดการ Error ด้วย TRY...CATCH
- TRY...CATCH และฟังก์ชัน ERROR_NUMBER, ERROR_MESSAGE และ ERROR_LINE
- THROW เทียบ RAISERROR และการกำหนดข้อความ Error ของระบบเอง
- ตาราง Error Log กลางที่ทุก Procedure ใช้ร่วมกัน
- XACT_STATE และการจัดการ Transaction ที่ล้มเหลวใน CATCH
- Lab: เพิ่มการจัดการ Error ให้ Procedure บันทึกคำสั่งซื้อ
Section 7: Lab: Transaction และ Isolation Level
- BEGIN TRAN, COMMIT, ROLLBACK และ SET XACT_ABORT ON
- Nested Transaction และ Savepoint ทำงานอย่างไรจริง
- Isolation Level: Read Committed, Read Committed Snapshot, Snapshot และ Serializable
- Blocking, Deadlock และภาพรวม Optimized Locking ใน SQL Server 2025
- Lab: ตัดสต็อกพร้อมกันหลายผู้ใช้โดยไม่ขายเกินจำนวนที่มี
Section 8: Lab: Dynamic SQL และสิทธิ์ของ Procedure
- SQL Injection เกิดขึ้นใน Procedure ได้อย่างไร
- sp_executesql พร้อม Parameter และ QUOTENAME สำหรับชื่อ Object
- Catch-all Query: เลือกระหว่าง OPTION (RECOMPILE) กับ Dynamic SQL
- ให้สิทธิ์ EXECUTE แทนสิทธิ์บนตาราง, Ownership Chaining และ EXECUTE AS
- ไม่บันทึกข้อมูลส่วนบุคคลลง Log เกินจำเป็น ตามหลัก PDPA
- Lab: Procedure ค้นหาสินค้าหลายเงื่อนไขที่ปลอดภัย และผู้ใช้แอปแตะตารางโดยตรงไม่ได้
Section 9: Lab: Execution Plan และ Parameter Sniffing
- Plan Cache และการนำแผนของ Stored Procedure กลับมาใช้ซ้ำ
- อ่าน Execution Plan และ SET STATISTICS IO, TIME เพื่อหาจุดที่ช้า
- Parameter Sniffing คืออะไร และอาการที่พบในระบบจริง
- ภาพรวม Parameter Sensitive Plan Optimization และ Optional Parameter Plan Optimization ใน SQL Server 2025
- ใช้ Query Store ดูประวัติประสิทธิภาพและบังคับแผนที่ดี
- Lab: จำลองปัญหา Parameter Sniffing แล้วเทียบวิธีแก้
Section 10: Workshop: ชั้น Data Access ด้วย Stored Procedure
- โจทย์: ระบบสั่งซื้อและสต็อกขนาดเล็ก
- ออกแบบชุด Procedure, Function และ Trigger ตามมาตรฐานเดียวกัน
- ใส่ Error Handling, Transaction และสิทธิ์ให้ครบ
- ทดสอบด้วยสคริปต์ และใช้ AI Assistant ช่วยรีวิวโค้ดโดยตรวจผลเอง
- นำเสนอและรีวิวโค้ดร่วมกัน