Alex Kuznetsov มีบทที่ยอดเยี่ยมในหนังสือของเขาDefensive Database Programming (บทที่ 8) ที่ครอบคลุม T-SQL TRY ... จับ, ธุรกรรม T-SQL & การตั้งค่า XACT_ABORT และการใช้การจัดการข้อผิดพลาดฝั่งไคลเอ็นต์ มันจะช่วยคุณได้มากในการตัดสินใจว่าตัวเลือกใดที่เหมาะสมที่สุดสำหรับสิ่งที่คุณต้องทำให้สำเร็จ
มีให้บริการฟรีที่ไซต์นี้ ฉันไม่มีส่วนเกี่ยวข้องใด ๆ กับ บริษัท แต่ฉันเป็นเจ้าของเวอร์ชันสำเนายากของหนังสือเล่มนั้น
มีรายละเอียดเล็ก ๆ น้อย ๆ มากมายในเรื่องนี้ซึ่งอธิบายโดย Alex ได้เป็นอย่างดี
ตามคำขอของ Nick ... (แต่ไม่ใช่ทั้งหมดนี้อยู่ในบท)
ในแง่ของการปรับคุณจะต้องมีความซื่อสัตย์อย่างไร้ความปราณีเกี่ยวกับกิจกรรมที่ต้องอยู่ในรหัส db และสิ่งที่ควรจะอยู่ในแอป เคยสังเกตไหมว่าโค้ดที่รันอย่างรวดเร็วมีแนวโน้มที่จะกลับมาที่การออกแบบสำหรับความกังวลเดียวต่อวิธีการหรือไม่
วิธีที่ง่ายที่สุดในการสื่อสารคือรหัสข้อผิดพลาดที่กำหนดเอง (> 50,000) มันค่อนข้างเร็วด้วย หมายความว่าคุณต้องเก็บรหัส db และรหัสแอปไว้ให้ตรงกัน ด้วยรหัสข้อผิดพลาดที่กำหนดเองคุณสามารถส่งคืนข้อมูลที่เป็นประโยชน์ในสตริงข้อความข้อผิดพลาด เนื่องจากคุณมีรหัสข้อผิดพลาดอย่างเคร่งครัดสำหรับสถานการณ์นั้นคุณสามารถเขียนโปรแกรมแยกวิเคราะห์ในรหัสแอปที่ปรับให้เหมาะกับรูปแบบข้อมูลของข้อผิดพลาด
นอกจากนี้เงื่อนไขข้อผิดพลาดใดที่ต้องลองตรรกะในฐานข้อมูล หากคุณต้องการลองอีกครั้งหลังจาก X วินาทีคุณควรจัดการในรหัสแอปเพื่อให้การทำธุรกรรมไม่ได้ปิดกั้นมากนัก หากคุณเพียงส่งการดำเนินการ DML ใหม่ทันทีการทำซ้ำใน SP อาจมีประสิทธิภาพมากขึ้น อย่างไรก็ตามโปรดทราบว่าคุณจะต้องทำซ้ำรหัสหรือเพิ่มเลเยอร์ของ SP เพื่อลองอีกครั้ง
จริง ๆ แล้วนั่นเป็นความเจ็บปวดครั้งใหญ่ที่สุดในขณะนี้ลองใช้ ... จับตรรกะใน SQL Server ในขณะนี้ มันสามารถทำได้ แต่มันเป็นเรื่องเล็กน้อย ค้นหาการปรับปรุงบางอย่างที่เกิดขึ้นกับสิ่งนี้ใน SQL Server 2012 โดยเฉพาะอย่างยิ่งข้อยกเว้นระบบการขว้างปาใหม่ (เก็บหมายเลขข้อผิดพลาดดั้งเดิมไว้) นอกจากนี้ยังมีFORMATMESSAGEซึ่งเพิ่มความยืดหยุ่นในการสร้างข้อความแสดงข้อผิดพลาดโดยเฉพาะอย่างยิ่งสำหรับการบันทึก