راهنمای گام به گام استفاده از TRY ... CATCH برای مدیریت SQL Server Errors

شناسایی خطاهای بدون وقفه اعدام

بیانیه TRY ... CATCH در Transact- SQL شرایط و خطاهای مربوط به برنامه های پایگاه داده خود را تشخیص می دهد. این بیانیه سنگ بنای مدیریت خطا SQL Server است و بخش مهمی از توسعه برنامه های پایگاه داده قوی است. TRY ... CATCH برای SQL Server با شروع سال 2008، پایگاه داده Azure SQL، Azure SQL Data Warehouse و Parallel Data Warehouse اعمال می شود.

معرفی TRY..CATCH

TRY ... CATCH به شما اجازه می دهد تا دو عبارت Transact-SQL را مشخص کنید: یکی که شما می خواهید "سعی کنید" و دیگری برای استفاده از "گرفتن" هر خطایی که ممکن است بوجود آید. هنگامی که SQL Server با یک عبارت TRY ... CATCH مواجه می شود، آن را بلافاصله بیانیه ای که در بند TRY قرار دارد را اجرا می کند. اگر دستور TRY با موفقیت اجرا شود، SQL Server به سادگی حرکت می کند. با این حال، اگر دستور TRY یک خطا ایجاد کند، SQL Server دستورات CATCH را اجرا می کند تا خطا را مرتبا مرتب کند.

نحو پایه این فرم را می گیرد:

شروع کنید {sql_statement | statement_block} END TRY شروع سگ [{sql_statement | statement_block}] END CATCH [؛ ]

سعی کنید ... نمونه CATCH

ساده ترین استفاده از این بیانیه را با استفاده از مثال ساده درک می کنید. تصور کنید که شما مدیر یک پایگاه منابع انسانی هستید که حاوی یک جدول به نام "کارمندان" است که حاوی اطلاعات مربوط به هر یک از کارکنان سازمان شما است. این جدول از یک شناسه کارمند عدد صحیح به عنوان کلید اولیه استفاده می کند . شما ممکن است تلاش کنید از بیانیه زیر برای قرار دادن یک کارمند جدید در پایگاه داده خود استفاده کنید:

INSERT INTO کارکنان (id، first_name، last_name، extension) VALUES (12497، 'مایک'، 'Chapple'، 4201)

در شرایط عادی، این بیانیه یک ردیف را به جدول کارمندان اضافه می کند. با این حال، اگر یک کارمند با شناسه 12497 در پایگاه داده وجود داشته باشد، قرار دادن ردیف محدودیت کلید اولیه را نقض می کند و نتیجه می گیرد:

MSG 2627، سطح 14، دولت 1، خط 1 نقض محدودیت اولیه کلید 'PK_employee_id'. می توانید کلید تکراری را در شیء 'dbo.employees' وارد نکنید. بیانیه فسخ شده است.

در حالی که این خطا اطلاعاتی را که برای حل مشکل نیاز دارید فراهم می کند، دو مسئله وجود دارد. اول، پیام رمزگشایی است. این شامل کدهای خطا، شماره خط و سایر اطلاعات غیر قابل درک به کاربر معمولی است. دوم، و مهمتر از همه، باعث می شود که این بیانیه به قطع شود و می تواند یک تصادف برنامه ایجاد کند.

جایگزین این است که بیانیه را در بیانیه TRY ... CATCH قرار دهید، همانطور که در زیر نشان داده شده است:

شروع به وارد شدن به کارکنان (id، first_name، last_name، extension) VALUES (12497، 'مایک'، 'Chapple'، 4201) END TRY START CATCH PRINT 'خطا:' + ERROR_MESSAGE ()؛ EXEC msdb.dbo.sp_send_dbmailprofile_name = 'ایمیل کارمند'، @ recipients = 'hr@foo.com'،body = 'خطایی رخ داده است که یک رکورد کارمند جدید ایجاد کرد.'،subject = 'خطای تکثیر کارکنان ID'؛ سقوط END

در این مثال، هر گونه خطا رخ می دهد به هر دو کاربر اجرای دستور و آدرس ایمیل hr@foo.com گزارش شده است. خطا نشان داده شده به کاربر در زیر نشان داده می شود:

خطا: نقض محدودیت اولیه KEY "PK_employee_id". می توانید کلید تکراری را در شیء 'dbo.employees' وارد نکنید. ایمیل در صف

مهمتر از همه، اجرای برنامه به طور معمول ادامه می یابد، به برنامه نویس اجازه می دهد تا به صورت مرتب با خطا برخورد شود. استفاده از بیانیه TRY ... CATCH یک روش ظریف برای فعال کردن اشتباهات در برنامه های پایگاه داده SQL Server است.

یادگیری بیشتر

اگر میخواهید بیشتر در مورد زبان پرس و جو ساخت یافته یاد بگیرید، مقدمه ای بر SQL را بخوانید.