يمكن لأداة المحاولة المضافة حديثًا في SQL Server 2005 اكتشاف الاستثناءات بسهولة وسألقي نظرة عليها اليوم وألخص النقاط الرئيسية على النحو
التالي
{ sql_statement |
بيان_كتلة }
إنهاء المحاولة
ابدأ بالالتقاط
{ sql_statement |
بيان_كتلة }
نهاية الصيد
، على غرار استخدام معالجة الاستثناءات في اللغات العادية، ولكن تجدر الإشارة إلى أن SQL SERVER يلتقط الاستثناءات غير الخطيرة فقط عندما لا يمكن توصيل الاستثناءات مثل قاعدة البيانات، وما إلى ذلك، ومثال على ذلك: ابدأ بالمحاولة
أعلن @X INT
- القسمة على صفر لتوليد الخطأ
ضبط @X = 1/0
PRINT "الأمر بعد الخطأ في كتلة TRY"
إنهاء المحاولة
ابدأ بالالتقاط
طباعة "تم اكتشاف خطأ"
نهاية الصيد
طباعة "الأمر بعد كتل TRY/CATCH"
بالإضافة إلى ذلك، يمكن تداخل محاولة الالتقاط في Begin TRY
حذف من GrandParent حيث الاسم = 'John Smith'
طباعة "تم حذف GrandParent بنجاح"
إنهاء المحاولة
ابدأ الصيد
طباعة "خطأ في حذف سجل الجد"
ابدأ بالمحاولة
احذف من الأصل حيث GrandParentID =
(حدد معرفًا مميزًا من GrandParent حيث الاسم = 'John Smith')
طباعة "تم حذف الأصل بنجاح"
إنهاء المحاولة
ابدأ الصيد
طباعة "خطأ في حذف الأصل"
ابدأ بالمحاولة
حذف من الطفل حيث ParentId =
(حدد معرفًا مميزًا من الأصل حيث GrandParentID =
(حدد معرفًا مميزًا من GrandParent حيث الاسم = 'John Smith'))
طباعة "تم حذف الطفل بنجاح"
إنهاء المحاولة
ابدأ الصيد
طباعة "خطأ في حذف الطفل"
إنهاء الصيد
إنهاء الصيد
إنهاء الصيد
بالإضافة إلى ذلك، يوفر SQL SERVER 2005 أساليب فئة الخطأ في آلية الاستثناء لتسهيل تصحيح الأخطاء، وهو أمر بسيط نسبيًا ولن يتم شرحه. ERROR_NUMBER(): يُرجع رقمًا مرتبطًا بالخطأ.ERROR_SEVERITY(): إرجاع مدى خطورة الخطأ.ERROR_STATE (): إرجاع رقم حالة الخطأ المرتبط بالخطأ.ERROR_PROCEDURE (): إرجاع اسم الإجراء المخزن أو المشغل الذي حدث فيه الخطأ. ERROR_LINE (): إرجاع رقم السطر داخل الروتين الفاشل الذي تسبب في الخطأ. ERROR_MESSAGE (): إرجاع النص الكامل لرسالة الخطأ. يتضمن النص القيم المقدمة لأي معلمات قابلة للاستبدال، مثل الأطوال أو أسماء الكائنات أو الأوقات. باستخدام أسلوب فئة الخطأ، ابدأ بالمحاولة
أعلن @X INT
- القسمة على صفر لتوليد الخطأ
ضبط @X = 1/0
PRINT "الأمر بعد الخطأ في كتلة TRY"
إنهاء المحاولة
ابدأ بالالتقاط
طباعة "تم اكتشاف خطأ"
حدد ERROR_NUMBER() رقم ERNumber،
ERROR_SEVERITY() Error_Severity،
ERROR_STATE() Error_State،
ERROR_PROCEDURE() Error_Procedure،
ERROR_LINE() Error_Line،
ERROR_MESSAGE() Error_Message
نهاية الصيد
طباعة "الأمر بعد كتل TRY/CATCH"
أخيرًا تم اكتشاف خطأ في الإخراج
Err_Num Err_Sev Err_State Err_Proc Err_Line Err_Msg
------- ------- --------- -------------------- ------- ----------------------------------
8134 16 1 NULL 4 حدث خطأ في القسمة على صفر
المصدر: jackyrong BLOG