TRY / CATCH naudojimas tvarkant SQL serverio klaidas

click fraud protection

„TRY / CATCH“ sakinys „Transact-SQL“ aptinka ir tvarko duomenų bazių programų klaidų sąlygas. Šis teiginys yra kertinis akmuo SQL Serverio klaidų tvarkymas ir yra svarbi kuriant patikimas duomenų bazių programas.

TRY / CATCH taikoma SQL Server pradedant nuo 2008 m., „Azure SQL Database“, „Azure SQL Data Warehouse“ ir „Parallel Data Warehouse“.

Pristatome TRY / CATCH

TRY./CATCH veikia nurodant du „Transact-SQL“ sakinius: vieną, kurį norite „išbandyti“, ir kitą, kad „užfiksuotumėte“ galimas klaidas. Kai SQL serveris aptinka TRY / CATCH sakinį, jis nedelsdamas įvykdo teiginį, įtrauktą į TRY sąlygą. Jei TRY sakinys vykdomas sėkmingai, SQL serveris eina toliau. Tačiau, jei TRY sakinys sugeneruoja klaidą, SQL serveris įvykdo CATCH sakinį, kad klaidą tvarkytų grakščiai.

Pagrindinė sintaksė yra tokia:

PRADĖK BANDYTI
{sql_statement | pareiškimo blokas}
PABANDYKITE BANDYTI
PRADĖK SUGAVIMĄ
[{sql_statement | pareiškimas_blokas}]
PABAIGA SUGAVIMAS
[; ]

BANDYTI / GAVYTI pavyzdys

Apsvarstykite žmogiškųjų išteklių duomenų bazę, kurioje yra lentelė, pavadinta

instagram viewer
darbuotojų, kurioje pateikiama informacija apie kiekvieną įmonės darbuotoją. Šioje lentelėje naudojamas sveikasis darbuotojo ID numeris pagrindinis raktas.

Galite pabandyti naudoti toliau pateiktą teiginį, norėdami į savo duomenų bazę įterpti naują darbuotoją:

INSERT INTO darbuotojai (ID, vardas, pavardė, plėtinys)
VERTYBĖS (12497, „Mike“, „Chapple“, 4201)

Įprastomis aplinkybėmis šis teiginys lentelėje „Darbuotojai“ pridės eilutę. Tačiau, jei duomenų bazėje jau yra darbuotojas, kurio ID yra 12497, įterpiant eilutę būtų pažeistas pirminio rakto apribojimas ir būtų tokia klaida:

Ms 2627, 14 lygis, 1 būsena, 1 eilutė
PAGRINDINIO RAKTO apribojimo „PK_employee_id“ pažeidimas. Negalima įterpti rakto dublikato „dbo.employees“.
Pareiškimas buvo nutrauktas.

Nors ši klaida pateikia informaciją, kurios jums reikia norint išspręsti problemą, yra dvi problemos. Pirma, pranešimas yra paslaptingas. Jame yra klaidų kodai, eilutės numeriai ir kita vidutiniam vartotojui nesuprantama informacija. Antra, ir dar svarbiau, tai lemia teiginio nutraukimą ir gali sukelti programos gedimą.

Alternatyva yra sakinį suvynioti į TRY… CATCH sakinį, kaip parodyta čia:

PRADĖK BANDYTI
INSERT INTO darbuotojai (ID, vardas, pavardė, plėtinys)
VERTYBĖS (12497, „Mike“, „Chapple“, 4201)
PABANDYKITE BANDYTI
PRADĖK SUGAVIMĄ
SPAUSDINTI „KLAIDA:“ + KLAIDA_MESAS ();
EXEC msdb.dbo.sp_send_dbmail
@profile_name = 'Darbuotojo paštas',
@ gavėjai = '[email protected]',
@body = 'Kuriant naują darbuotojo įrašą įvyko klaida.',
@subject = 'Darbuotojų duomenų bazės klaida';
PABAIGA SUGAVIMAS

Šiame pavyzdyje apie įvykusias klaidas pranešama komandą vykdančiam vartotojui ir el. Pašto adresu [email protected]. Vartotojui rodoma klaida yra:

Klaida: PAGRINDINIO RAKTO apribojimo „PK_employee_id“ pažeidimas. 
Negalima įterpti rakto dublikato „dbo.employees“.
Paštas eilėje.

Programos vykdymas tęsiasi įprastai, leidžiant programuotojui tvarkyti klaidą. TRY / CATCH sakinio naudojimas yra elegantiškas būdas aktyviai aptikti ir tvarkyti klaidas, atsirandančias SQL Server duomenų bazės programose.

Sužinokite daugiau

Norėdami sužinoti daugiau apie struktūrinę užklausų kalbą, peržiūrėkite mūsų straipsnį SQL pagrindai.

instagram story viewer