Nustatykite klaidas nepertraukdamos vykdymo
TRY ... CATCH pareiškimas Transact- SQL aptinka ir tvarko klaidų sąlygas jūsų 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 teiginys sėkmingai vykdo, "SQL Server" paprasčiausiai juda. Tačiau, jei užrašas TRY sukuria klaidą, SQL Server užpildo CATCH ataskaitą, kad grakščiai tvarkytų klaidą.
Pagrindinė sintaksė naudojama šia forma:
BEGIN TRY {sql_statement | statement_block} END TRY BEGIN CATCH [{sql_statement | statement_block}] END CATCH [; ]TRY ... CATCH Pavyzdys
Lengviausia suprasti šio teiginio naudojimą naudodami pavyzdį. Įsivaizduokite, kad esate žmogiškųjų išteklių duomenų bazės administratorius, kuriame yra lentelė "Darbuotojai", kurioje yra informacijos 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ę:
INSERT INTO employees (id, first_name, last_name, extension) VALUES (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ą:
Msg 2627, 14 lygis, 1 būsena, 1 eilutė PRIMARY KEY apribojimo pažeidimas "PK_employee_id". 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, 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 žemiau:
Šiame pavyzdyje bet kokios klaidos, apie kurias pranešama, yra ir naudotojui, vykdančiam komandą, ir hr@foo.com el. Pašto adresą. Žemiau rodoma naudotojui pateikta klaida:
Klaida: PRIMARY KEY apribojimo "PK_employee_id" pažeidimas. Negalima įrašyti pasikartojančio rakto į objektą "dbo.employees". Paštas eilėje.Svarbiausia, kad programos vykdymas tęsiasi paprastai, leidžiant programuotojui maloniai tvarkyti klaidą. Naudojimas TRY ... CATCH pareiškimas yra elegantiškas būdas aktyviai aptikti ir valdyti klaidas, kurios atsiranda SQL Server duomenų bazių programose.
Sužinokite daugiau
Jei norite sužinoti daugiau apie "Structured Query Language", perskaitykite " SQL įvedimas" .