Skip to main content

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

CS50 2018 - Lecture 8 - SQL (قد 2025)

CS50 2018 - Lecture 8 - SQL (قد 2025)
Anonim

تقوم عبارة 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 لمعالجة الخطأ بأمان.

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

ابدأ التجربة كتلة البيان نهاية محاولةبيغين CATCHsql_statementنهاية CATCH ;

TRY … CATCH مثال

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

INSERT INTO staff (id، first_name، last_name، extension)القيم (12497 ، 'مايك' ، 'تشابل' ، 4201)

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

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

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

ابدأ التجربةINSERT INTO staff (id، first_name، last_name، extension)القيم (12497 ، 'مايك' ، 'تشابل' ، 4201)نهاية محاولةبيغين CATCHPRINT 'ERROR:' + ERROR_MESSAGE ()؛EXEC msdb.dbo.sp_send_dbmailprofile_name = "بريد الموظف" ،recipients = '[email protected]' ،body = 'حدث خطأ في إنشاء سجل موظف جديد.'،subject = "خطأ تكرار معرف الموظف" ؛نهاية CATCH

في هذا المثال ، يتم الإبلاغ عن أي أخطاء تحدث للمستخدم تنفيذ الأمر وعنوان البريد الإلكتروني [email protected]. الخطأ الموضح للمستخدم هو:

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

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

تعلم المزيد

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