Korištenje TRY / CATCH za rukovanje pogreškama SQL servera

click fraud protection

Izjava TRY / CATCH u Transact-SQL otkriva i obrađuje uvjete pogreške u aplikacijama baze podataka. Ova je izjava kamen temeljac SQL Rukovanje pogreškama poslužitelja i važan je dio razvoja robusnih aplikacija baza podataka.

TRY / CATCH primjenjuje se na SQL Server počevši od 2008. godine, Azure SQL bazu podataka, Azure SQL skladište podataka i Paralelno skladište podataka.

Predstavljamo TRY / CATCH

TRY./CATCH djeluje tako da specificira dvije Transact-SQL naredbe: jednu koju želite "isprobati", a drugu za "hvatanje" svih pogrešaka koje bi mogle nastati. Kada SQL Server naiđe na TRY / CATCH izraz, odmah izvršava izraz koji je uključen u TRY klauzulu. Ako se TRY izraz uspješno izvrši, SQL Server nastavlja dalje. Međutim, ako TRY izraz generira pogrešku, SQL Server izvršava CATCH izraz kako bi graciozno obradio pogrešku.

Osnovna sintaksa ima ovaj oblik:

POČNITE POKUŠATI
{sql_statement | blok izjave}
KONAČNO PROBAJ
POČINITE UHVAT
[{sql_statement | blok izjave}]
ZAVRŠI ULOV
[; ]

PRIMJER / UHVAT Primjer

instagram viewer

Razmotrimo bazu podataka o ljudskim potencijalima koja sadrži tablicu s imenom zaposlenici, koji sadrži podatke o svakom zaposleniku u tvrtki. Ta tablica koristi cjelobrojni ID broj zaposlenika kao Osnovni ključ.

Možete pokušati upotrijebiti donju izjavu za umetanje novog zaposlenika u svoju bazu podataka:

INSERT INTO zaposlenika (id, ime, prezime, proširenje)
VRIJEDNOSTI (12497, 'Mike', 'Chapple', 4201)

U normalnim okolnostima, ova bi izjava dodala redak u tablicu zaposlenika. Međutim, ako zaposlenik s ID-om 12497 već postoji u bazi podataka, umetanje retka prekršilo bi ograničenje primarnog ključa i rezultiralo sljedećom pogreškom:

Poruka 2627, razina 14, stanje 1, linija 1
Kršenje PRIMARNOG KLJUČNOG ograničenja 'PK_employee_id'. Ne može se umetnuti duplicirani ključ u objekt 'dbo.employees'.
Izjava je prekinuta.

Iako vam ova pogreška daje informacije potrebne za rješavanje problema, s njom postoje dva problema. Prvo, poruka je tajna. Uključuje kodove pogrešaka, brojeve redaka i druge informacije koje su prosječnom korisniku nerazumljive. Drugo, i što je još važnije, dovodi do prekida izjave i može uzrokovati pad programa.

Alternativa je umotavanje izjave u TRY... CATCH izjavu, kao što je prikazano ovdje:

POČNITE POKUŠATI
INSERT INTO zaposlenika (id, ime, prezime, proširenje)
VRIJEDNOSTI (12497, 'Mike', 'Chapple', 4201)
KONAČNO PROBAJ
POČINITE UHVAT
ISPIS 'POGREŠKA:' + POGREŠKA_PORUKA ();
EXEC msdb.dbo.sp_send_dbmail
@profile_name = 'Mail zaposlenika',
@recipients = '[email protected]',
@body = 'Došlo je do pogreške pri stvaranju novog zapisa zaposlenika.',
@subject = 'Pogreška baze podataka zaposlenika';
ZAVRŠI ULOV

U ovom se primjeru sve pogreške koje se pojave prijavljuju i korisniku koji izvršava naredbu i e-adresi [email protected]. Pogreška koja se prikazuje korisniku je:

Pogreška: Kršenje OSNOVNOG OGRANIČENJA KLJUČA 'PK_employee_id'. 
Ne može se umetnuti duplicirani ključ u objekt 'dbo.employees'.
Pošta je na čekanju.

Izvršenje aplikacije nastavlja se normalno, omogućavajući programeru da obradi pogrešku. Upotreba izraza TRY / CATCH elegantan je način za proaktivno otkrivanje i rukovanje pogreškama koje se javljaju u aplikacijama baze podataka SQL Server.

Učiti više

Da biste saznali više o jeziku strukturiranih upita, pogledajte naš članak Osnove SQL-a.

instagram story viewer