استخدام TRY / CATCH لمعالجة أخطاء SQL Server

تقوم عبارة TRY / CATCH في Transact-SQL باكتشاف حالات الخطأ ومعالجتها في تطبيقات قواعد البيانات. هذا البيان هو حجر الزاوية في SQL يعد التعامل مع أخطاء الخادم جزءًا مهمًا من تطوير تطبيقات قوية لقواعد البيانات.

ينطبق TRY / CATCH على SQL Server بدءًا من 2008 وقاعدة بيانات Azure SQL ومستودع بيانات Azure SQL ومستودع البيانات المتوازي.

تقديم TRY / CATCH

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

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

ابدأ المحاولة
{sql_statement | كتلة البيان}
المحاولة النهائية
بداية الالتقاط
[{sql_statement | بيان_بلوك}]
نهاية القبض
[; ]

مثال محاولة / القبض

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

instagram viewer

قد تحاول استخدام العبارة أدناه لإدراج موظف جديد في قاعدة البيانات الخاصة بك:

INSERT INTO الموظفون (المعرف ، الاسم الأول ، الاسم الأخير ، الملحق)
VALUES (12497، "Mike"، "Chapple"، 4201)

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

Msg 2627 ، المستوى 14 ، حالة 1 ، السطر الأول
انتهاك القيد PRIMARY KEY 'PK_employee_id'. لا يمكن إدراج مفتاح مكرر في الكائن "dbo.employees".
تم إنهاء العبارة.

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

البديل هو لف العبارة في TRY… CATCH بيان ، كما هو موضح هنا:

ابدأ المحاولة
INSERT INTO الموظفون (المعرف ، الاسم الأول ، الاسم الأخير ، الملحق)
VALUES (12497، "Mike"، "Chapple"، 4201)
المحاولة النهائية
بداية الالتقاط
PRINT 'ERROR:' + ERROR_MESSAGE () ،
EXEC msdb.dbo.sp_send_dbmail
profile_name = "بريد الموظف" ،
recipients = '[email protected]' ،
body = 'حدث خطأ أثناء إنشاء سجل موظف جديد.'،
subject = "خطأ في قاعدة بيانات الموظف" ؛
نهاية القبض

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

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

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

تعلم المزيد

لمعرفة المزيد حول لغة الاستعلام الهيكلية ، راجع مقالتنا أساسيات SQL.