دليل خطوة بخطوة لاستخدام TRY ... CATCH للتعامل مع أخطاء SQL Server

تحديد الأخطاء دون مقاطعة التنفيذ

تقوم عبارة TRY… CATCH في Transact- SQL بالكشف عن حالات الخطأ في تطبيقات قاعدة البيانات الخاصة بك ومعالجتها. هذا البيان هو حجر الزاوية في معالجة الخطأ SQL Server وهو جزء هام من تطوير تطبيقات قاعدة البيانات القوية. TRY ... يتم تطبيق CATCH على SQL Server بدءًا من 2008 ، و Azure SQL Database ، و Azure SQL Data Warehouse ، و Wareallel Data Warehouse.

إدخال TRY..CATCH

تعمل TRY ... CATCH من خلال السماح لك بتحديد عبارات SQL للعمليات: واحدة تريد "محاولة" وأخرى لاستخدام "التقاط" أي أخطاء قد تنشأ. عندما يصادف SQL Server عبارة TRY ... CATCH ، فإنه ينفذ العبارة المضمنة في جملة TRY مباشرة. إذا تم تنفيذ عبارة TRY بنجاح ، فسيتم نقل SQL Server ببساطة. ومع ذلك ، إذا كان بيان TRY بإنشاء خطأ ، ينفذ SQL Server العبارة CATCH لمعالجة الخطأ بأمان.

يأخذ بناء الجملة الأساسي هذا النموذج:

ابدأ التجربة {sql_statement | statement_block} نهاية تجريبى CATCH [{sql_statement | statement_block}] نهاية CATCH [؛ ]

TRY ... CATCH مثال

من الأسهل فهم استخدام هذا البيان من خلال استخدام مثال. تخيل أنك المسؤول عن قاعدة بيانات الموارد البشرية التي تحتوي على جدول باسم "الموظفين" يحتوي على معلومات حول كل موظف في مؤسستك. يستخدم هذا الجدول رقم معرف الموظف عددًا صحيحًا كمفتاح أساسي . قد تحاول استخدام العبارة أدناه لإدخال موظف جديد في قاعدة البيانات الخاصة بك:

INSERT INTO employees (id، first_name، last_name، extension) VALUES (12497، 'Mike'، 'Chapple'، 4201)

تحت الظروف العادية ، سيضيف هذا البيان صف إلى جدول Employees "الموظفين". ومع ذلك ، إذا كان الموظف الذي يحمل الرقم التعريفي 12497 موجودًا بالفعل في قاعدة البيانات ، فإن إدراج الصف ينتهك قيد المفتاح الأساسي وينتج عنه الخطأ التالي:

msg 2627، Level 14، State 1، Line 1 Violation of PRIMARY KEY constraint 'PK_employee_id'. لا يمكن إدخال مفتاح مكرر في كائن 'dbo.employees'. تم إنهاء العبارة.

بينما يوفر لك هذا الخطأ المعلومات التي تحتاج إليها لتحرّي المشكلة وإصلاحها ، هناك مشكلتان تتعلقان بها. أولاً ، الرسالة مشفرة. ويشمل رموز الخطأ وأرقام الخطوط وغيرها من المعلومات غير مفهومة للمستخدم العادي. ثانيًا ، والأهم من ذلك ، أنه يؤدي إلى إحباط العبارة وقد يتسبب في تعطل في التطبيق.

البديل هو لفّ البيان في TRY… بيان CATCH ، كما هو موضح أدناه:

ابدأ قم بتضمين الموظفين INTO (معرف، first_name، last_name، extension) VALUES (12497، 'Mike'، 'Chapple'، 4201) END TRY BEGIN CATCH PRINT 'Error:' + ERROR_MESSAGE ()؛ EXEC msdb.dbo.sp_send_dbmailprofile_name = 'Employee Mail'،recipients = 'hr@foo.com'،body = 'حدث خطأ في إنشاء سجل موظف جديد.'،subject = 'خطأ تكرار معرف الموظف'؛ نهاية CATCH

في هذا المثال ، يتم الإبلاغ عن أي أخطاء تحدث للمستخدم تنفيذ الأمر وعنوان البريد الإلكتروني hr@foo.com. يظهر الخطأ الذي يظهر للمستخدم أدناه:

خطأ: انتهاك القيد PRIMARY KEY 'PK_employee_id'. لا يمكن إدخال مفتاح مكرر في كائن 'dbo.employees'. البريد في قائمة الانتظار.

الأهم من ذلك ، يستمر تنفيذ التطبيق بشكل طبيعي ، مما يسمح للمبرمج للتعامل مع الخطأ بأمان. استخدام عبارة TRY ... CATCH هو طريقة أنيقة للكشف عن الأخطاء التي تحدث في تطبيقات قاعدة بيانات SQL Server ومعالجتها بشكل استباقي.

تعلم المزيد

إذا كنت ترغب في معرفة المزيد عن لغة الاستعلام الهيكلية ، اقرأ مقدمة إلى SQL .