TRY … CATCH pareiškimas Transact-SQL aptinka ir tvarko klaidų sąlygas duomenų bazių programose. Šis teiginys yra "SQL Server" klaidų valdymo kertinis akmuo ir yra svarbi tvirtų duomenų bazių programų kūrimo dalis. TRY … CATCH taikomas SQL Server nuo 2008 m., Azure SQL duomenų bazė, Azure SQL duomenų saugykla ir lygiagrečių duomenų saugykla.
Pristatome TRY … CATCH
TRY … CATCH veikia, leidžiant jums nurodyti du Transact-SQL pareiškimus: vieną, kurį norite "pabandyti", o kitą - naudoti "sugauti" bet kokias galimas klaidas. Kai SQL Server susiduria su TRY … CATCH teiginiu, jis nedelsdamas vykdo pareiškimą, įtrauktą į TRY išlygą. Jei TRY pareiškimas sėkmingai vykdomas, SQL Server juda. Tačiau, jei užrašas TRY sukuria klaidą, SQL Server vykdo CATCH ataskaitą, kad graziai apdorotų klaidą.
Pagrindinė sintaksė naudojama šia forma:
BEGIN TRY pareiškimo blokas END TRYBEGIN CATCHsql_statementPabaiga ; Pavyzdžiui, lengva suprasti šio teiginio naudojimą. Įsivaizduokite, kad esate žmogiškųjų išteklių duomenų bazės administratorius, kuriame yra lentelė "Darbuotojai", kurioje pateikiama informacija apie kiekvieną jūsų organizacijos darbuotoją. Lentelėje pagrindinis raktas naudojamas kaip sveikasis skaitmuo. Galite bandyti naudoti toliau pateiktą teiginį, kad įterptumėte naują darbuotoją į savo duomenų bazę: ĮRAŠYTI ĮMONĖMS (ID, vardas, vardas, pratęsimas)VERTYBĖS (12497, "Mike", "Chapple", 4201)
Esant normalioms aplinkybėms, šis teiginys pridės eilutę prie lentelės "Darbuotojai". Tačiau jei duomenų bazėje jau egzistuoja darbuotojas su ID 12497, eilutės įterpimas pažeidžia pagrindinį raktą ir sukelia tokią klaidą: 2627 m., 14 lygis, 1 būsena, 1 eilutėPRIMARY KEY apribojimo "PK_employee_id" pažeidimas. Negalima įrašyti pasikartojančio rakto į objektą "dbo.employees".Pranešimas buvo nutrauktas.
Nors ši klaida pateikia jums informaciją, kurios reikia norint išspręsti problemą, yra dvi problemos. Pirma, žinutė yra paslaptinga. Jame yra klaidų kodai, eilučių numeriai ir kita informacija, kuri yra nesuprantama vidutiniam vartotojui. Antra, ir dar svarbiau, tai sukelia teiginio nutraukimą ir gali sukelti programos triktį.Alternatyva yra įrašyti teiginį TRY … CATCH teiginyje, kaip parodyta čia: BEGIN TRYĮRAŠYTI ĮMONĖMS (ID, vardas, vardas, pratęsimas)VERTYBĖS (12497, "Mike", "Chapple", 4201)END TRYBEGIN CATCHPRINT 'ERROR:' + ERROR_MESSAGE ();EXEC msdb.dbo.sp_send_dbmail@profile_name = "Darbuotojų el. paštas"@ recipients = '[email protected]',@body = 'Įvyko klaida kuriant naują darbuotojų įrašą',@subject = 'Darbuotojų ID kopijavimo klaida';Pabaiga
Šiame pavyzdyje bet kokios klaidos, apie kurias pranešama, yra ir naudotojui, vykdančiam komandą, ir [email protected] el. Pašto adresą. Vartotojui rodoma klaida: Klaida: PRIMARY KEY apribojimo "PK_employee_id" pažeidimas. Negalima įrašyti pasikartojančio rakto į objektą "dbo.employees".Paštas eilėje.
Programos vykdymas tęsiasi paprastai, leidžiant programuotojui tvarkyti klaidą. Naudojimas TRY … CATCH pareiškimas yra elegantiškas būdas aktyviai aptikti ir valdyti klaidas, kurios atsiranda SQL Server duomenų bazių programose. Jei norite sužinoti daugiau apie "Structured Query Language", žr. "SQL įvadas". TRY … CATCH Pavyzdys
Sužinokite daugiau