ระบุข้อผิดพลาดโดยไม่รบกวนการทำงาน
คำสั่ง TRY ... CATCH ใน Transact- SQL จะตรวจจับและจัดการกับเงื่อนไขข้อผิดพลาดในแอ็พพลิเคชันฐานข้อมูลของคุณ คำสั่งนี้เป็นรากฐานสำคัญของการจัดการข้อผิดพลาดของ SQL Server และเป็นส่วนสำคัญในการพัฒนาแอพพลิเคชันฐานข้อมูลที่มีประสิทธิภาพ TRY ... CATCH ใช้กับ SQL Server โดยเริ่มต้นด้วย 2008, Azure SQL Database, Azure SQL Data Warehouse และ Parallel Data Warehouse
แนะนำ TRY..CATCH
TRY ... CATCH ทำงานโดยให้คุณระบุคำสั่ง Transact-SQL สองคำ: แบบที่คุณต้องการ "try" และอีกคำหนึ่งที่จะใช้เพื่อ "จับ" ข้อผิดพลาดที่อาจเกิดขึ้น เมื่อ SQL Server พบคำสั่ง TRY ... CATCH ทันทีจะรันคำสั่งที่รวมอยู่ใน TRY clause ถ้าคำสั่ง TRY รันเสร็จเรียบร้อยแล้ว SQL Server จะดำเนินการต่อ อย่างไรก็ตามถ้าคำสั่ง TRY สร้างข้อผิดพลาด SQL Server รันคำสั่ง CATCH เพื่อจัดการข้อผิดพลาดอย่างสง่างาม
ไวยากรณ์พื้นฐานใช้รูปแบบนี้:
BEGIN TRY {sql_statement | statement_block} END TRY BEGIN CATCH [{sql_statement | statement_block}] END CATCH [; ]ลองตัวอย่างเช่น CATCH
เป็นเรื่องง่ายที่จะเข้าใจการใช้ข้อความนี้โดยใช้ตัวอย่าง ลองจินตนาการว่าคุณเป็นผู้ดูแลระบบฐานข้อมูลทรัพยากรมนุษย์ที่มีตารางชื่อ "Employees" ซึ่งมีข้อมูลเกี่ยวกับพนักงานแต่ละคนในองค์กรของคุณ ตารางนั้นใช้หมายเลขรหัสพนักงานเป็นจำนวนเต็มเป็น คีย์หลัก คุณอาจลองใช้คำสั่งด้านล่างเพื่อแทรกพนักงานใหม่ลงในฐานข้อมูลของคุณ:
พนักงาน INSERT INTO (id, first_name, last_name, extension) VALUES (12497, 'Mike', 'Chapple', 4201)ภายใต้สถานการณ์ปกติคำสั่งนี้จะเพิ่มแถวลงในตารางพนักงาน อย่างไรก็ตามถ้าพนักงานที่มี ID 12497 มีอยู่แล้วในฐานข้อมูลการแทรกแถวจะละเมิดข้อ จำกัด ของคีย์หลักและทำให้เกิดข้อผิดพลาดต่อไปนี้:
ข่าวสารเกี่ยวกับ 2627 ระดับ 14 รัฐ 1 บรรทัดที่ 1 การละเมิดข้อ จำกัด ของคีย์หลัก 'PK_employee_id' ไม่สามารถแทรกคีย์ซ้ำในวัตถุ 'dbo.employees' ได้ คำชี้แจงนี้ถูกยกเลิกแล้ว แม้ว่าข้อผิดพลาดนี้จะให้ข้อมูลที่คุณต้องการแก้ไขปัญหามีปัญหาสองประการ ขั้นแรกให้ข้อความมีความคลุมเครือ ประกอบด้วยรหัสข้อผิดพลาดหมายเลขบรรทัดและข้อมูลอื่น ๆ ที่ไม่สามารถเข้าใจได้กับผู้ใช้โดยเฉลี่ย ประการที่สองและที่สำคัญยิ่งกว่านั้นก็คือทำให้คำสั่งนี้ถูกยกเลิกและอาจทำให้แอพพลิเคชันเกิดความผิดพลาดได้
ทางเลือกคือการตัดงบในคำสั่ง TRY ... CATCH ดังที่แสดงด้านล่าง:
ในตัวอย่างนี้ข้อผิดพลาดใด ๆ ที่เกิดขึ้นจะรายงานไปยังผู้ใช้ที่ทำการคำสั่งและที่อยู่อีเมล hr@foo.com ข้อผิดพลาดที่แสดงต่อผู้ใช้ปรากฏด้านล่าง:
ข้อผิดพลาด: การละเมิดข้อ จำกัด ของคีย์หลัก 'PK_employee_id' ไม่สามารถแทรกคีย์ซ้ำในวัตถุ 'dbo.employees' ได้ จดหมายที่เข้าคิวสิ่งสำคัญที่สุดคือการดำเนินการแอ็พพลิเคชันยังดำเนินต่อไปตามปกติทำให้โปรแกรมเมอร์สามารถจัดการกับข้อผิดพลาดได้อย่างสง่างาม การใช้คำสั่ง TRY ... CATCH เป็นวิธีที่ชาญฉลาดในการตรวจจับและจัดการข้อผิดพลาดที่เกิดขึ้นในโปรแกรมประยุกต์ฐานข้อมูล SQL Server ในเชิงรุก
เรียนรู้เพิ่มเติม
ถ้าคุณต้องการเรียนรู้เพิ่มเติมเกี่ยวกับ Structured Query Language โปรดอ่าน บทนำสู่ SQL