شناسایی خطاهای بدون وقفه اعدام
بیانیه 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 قرار دهید، همانطور که در زیر نشان داده شده است:
در این مثال، هر گونه خطا رخ می دهد به هر دو کاربر اجرای دستور و آدرس ایمیل hr@foo.com گزارش شده است. خطا نشان داده شده به کاربر در زیر نشان داده می شود:
خطا: نقض محدودیت اولیه KEY "PK_employee_id". می توانید کلید تکراری را در شیء 'dbo.employees' وارد نکنید. ایمیل در صفمهمتر از همه، اجرای برنامه به طور معمول ادامه می یابد، به برنامه نویس اجازه می دهد تا به صورت مرتب با خطا برخورد شود. استفاده از بیانیه TRY ... CATCH یک روش ظریف برای فعال کردن اشتباهات در برنامه های پایگاه داده SQL Server است.
یادگیری بیشتر
اگر میخواهید بیشتر در مورد زبان پرس و جو ساخت یافته یاد بگیرید، مقدمه ای بر SQL را بخوانید.