SQL-server xatolarini boshqarish uchun CATCH-ni ishlatish uchun qadam ko'rsatma

Xatoni ijro etishni to'xtatmasdan aniqlang

TRACT ... Transact- SQL ning CATCH terminologiyasi ma'lumotlar bazasi ilovalaridagi xato sharoitlarini aniqlaydi va boshqaradi. Ushbu tushuntirish SQL Server xatolarini tuzatishning asosiy poydevoridir va kuchli ma'lumotlar bazasi dasturlarini ishlab chiqishning muhim qismidir. TRY ... CATCH 2008 dan boshlab SQL Server, Azure SQL ma'lumotlar bazasi, Azure SQL Data Warehouse va Parallel Data Warehouse uchun qo'llaniladi.

TRY .. CATCH ni tanishtiring

TRY ... CATCH ikkita Transact-SQL ifodasini belgilashga imkon beradi: siz "sinab ko'rmoqchi bo'lgan" va boshqasi paydo bo'lishi mumkin bo'lgan har qanday xatolarni "qo'lga olish" uchun foydalanish uchun. SQL Server bir TRY ... CATCH tablosuyla duch kelganida, darhol TRY yon tümcesinde joy olgan iborani amalga oshiradi. Agar Usha iborasi muvaffaqiyatli bajarilsa, SQL Server faqatgina harakat qiladi. Biroq, Ushalar bayonotida xato hosil qilinsa, SQL Server xatoni xolisona boshqarishi uchun CATCH ifodasini amalga oshiradi.

Asosiy sintaksis bu shaklni oladi:

BEGIN TRY {sql_statement | statement_block} END QAYD BEGIN CATCH [{sql_statement | statement_block}] END CATCH [; ]

TRY ... CATCH misoli

Bu misolni ishlatish orqali tushunish osonroqdir. Tashkilotingizdagi xodimlarning har biri haqida ma'lumotni o'z ichiga olgan "Xodimlar" nomli jadvalni o'z ichiga olgan inson resurslari bazasi ma'muri ekaningizni tasavvur qiling. Ushbu jadval birlamchi kalit sifatida to'liq raqamli ishchi identifikatorini ishlatadi. Ma'lumotlar bazasiga yangi xodimni kiritish uchun quyidagi bayonotdan foydalanishga harakat qilishingiz mumkin:

INSERT INTO xodimlar (id, first_name, last_name, extension) VALUES (12497, 'Mayk', 'Chapple', 4201)

Oddiy sharoitlarda, bu bayonnoma xodimlar jadvaliga qator qo'shishadi. Biroq, ID 12497 raqamiga ega bo'lgan xodim ma'lumotlar bazasida allaqachon mavjud bo'lsa, qatorni kiritish asosiy kalitni cheklaydi va quyidagi xatolikka olib keladi:

Msg 2627, 14-daraja, davlat 1, 1-sath. PRIMARY KEY cheklovi 'PK_employee_id' buzilishi. 'Dbo.employees' dagi ikki nusxadagi kalitni kiritish mumkin emas. Deklaratsiya bekor qilindi.

Ushbu xato sizni muammoni bartaraf etish uchun kerak bo'lgan ma'lumotlarni taqdim etsa-da, u bilan ikki muammo bor. Birinchisi, xabar sirli. Bu xato kodlari, chiziqli raqamlar va o'rtacha ma'lumotlarga tushunarli bo'lmagan boshqa ma'lumotlarni o'z ichiga oladi. Ikkinchidan, va bundan ham muhimi, bu bayonot bekor qilinishiga olib keladi va dasturni buzilishiga olib kelishi mumkin.

Buning muqobilligi quyidagicha ifodalanadi: CATCH bayonoti:

VALUE (12497, "Mayk", "Chapple", 4201) "Xato: '+ ERROR_MESSAGE ()' ni ishga tushirish uchun BEGIN TRY INSERT INTO xodimlar (id, first_name, last_name, extension) EXEC msdb.dbo.sp_send_dbmail @profile_name = 'Xodimlarning pochta manzili', @recipients = 'hr@foo.com', @body = 'Yangi ishchi yozuvini yaratishda xato ro'y berdi.', @subject = 'Xodimlarning identifikatsiya raqamini ko'paytirish xatosi'; END CATCH

Ushbu misolda, yuzaga keladigan har qanday xato va hr@foo.com e-mail manzilini ishlatuvchi foydalanuvchi bildiriladi. Foydalanuvchiga ko'rsatilgan xato quyida ko'rsatiladi:

Xato: PRIMARY KEY cheklovini buzish 'PK_employee_id'. 'Dbo.employees' dagi ikki nusxadagi kalitni kiritish mumkin emas. Pochta navbatga qo'yildi.

Eng muhimi, dasturni bajarish an'anaviy tarzda davom etadi, bu esa dasturchini xushmuomalalik bilan xatoga yo'l qo'yishga imkon beradi. TRY dan foydalanish ... CATCH terminologiyasi SQL Server ma'lumotlar bazasi dasturlarida yuz beradigan xatolarni proaktif aniqlash va ularni bajarishning oqilona usulidir.

Batafsil ma'lumot

Agar tuzilgan so'rovlar tili haqida ko'proq ma'lumotga ega bo'lishni istasangiz SQL ga kirishni o'qing.