Korak po korak Korišćenje TRY ... CATCH-a za rukovanje greškama SQL Servera

Identifikujte greške bez prekida izvršenja

Izjava TRY ... CATCH u Transact- SQL otkriva i obrađuje uslove za greške u vašim aplikacijama baze podataka. Ova izjava je kamen temeljac za rukovanje greškama SQL Servera i važan je dio razvoja robusnih aplikacija baze podataka. TRY ... CATCH se odnosi na SQL Server počev od 2008. godine, Azure SQL baza podataka, Azure SQL skladište podataka i Paralelno skladište podataka.

Predstavljamo TRY..CATCH

TRY ... CATCH radi tako što vam dozvoljava da navedete dve Transact-SQL izraze: one koje želite "pokušati", a drugi da koriste "da uhvate" sve greške koje se mogu pojaviti. Kada SQL Server dođe do izjave TRY ... CATCH, odmah izvršava izjavu uključenu u TRY klauzulu. Ako se TRY izjava uspešno izvrši, SQL Server se jednostavno uključuje. Međutim, ako izjava TRY generiše grešku, SQL Server izvršava CATCH izraz kako bi graciozno rukovao greškom.

Osnovna sintaksa uzima ovaj oblik:

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

TRY ... Primer CATCH

Najlakše je razumeti upotrebu ove izjave kroz upotrebu primera. Zamislite da ste administrator baze podataka o ljudskim resursima koji sadrži tablicu pod nazivom "Zaposleni" koja sadrži informacije o svakom od zaposlenih u vašoj organizaciji. Ta tabela koristi ceo broj ID-a zaposlenog kao primarni ključ . Možda ćete pokušati da koristite izjavu ispod kako biste uneli novog zaposlenog u svoju bazu podataka:

INSERT INTO zaposleni (id, ime_prijatelja, last_name, ekstenzija) VALUES (12497, 'Mike', 'Chapple', 4201)

Pod normalnim okolnostima, ova izjava će dodati red do tabele Zaposleni. Međutim, ako zaposleni sa ID 12497 već postoji u bazi podataka, ubacivanjem redova bi se prekrsilo ograničenje primarnog ključa i rezultiralo sljedećom greškom:

Msg 2627, Nivo 14, Stanje 1, Linija 1 Povreda PRIMARY KEY ograničenja 'PK_employee_id'. Ne mogu uložiti duplikat ključa u objekt "dbo.employees". Izjava je prekinuta.

Dok vam ova greška pruža informacije koje vam trebaju da biste rešili problem, postoje dvije probleme sa njim. Prvo, poruka je kriptična. To uključuje kodove grešaka, brojeve linija i druge informacije nerazumljive prosečnom korisniku. Drugo, i što je još važnije, ona dovodi do prekida izjave i može prouzrokovati propast aplikacija.

Alternativa je zamjena izjave u TRY ... CATCH izrazu, kao što je prikazano u nastavku:

BEGIN TRY INSERT INTO zaposlenima (id, first_name, last_name, extension) VREDNOSTI (12497, 'Mike', 'Chapple', 4201) END TRY BEGIN PRINT 'Greška:' + ERROR_MESSAGE (); EXEC msdb.dbo.sp_send_dbmail @profile_name = 'Employee Mail', @recipients = 'hr@foo.com', @body = 'Došlo je do greške pri kreiranju novog rekorda zaposlenog.', @subject = 'Error Duplication ID Employee'; END CATCH

U ovom primeru, greške koje se javljaju prijavljuju se i korisniku koji izvršava komandu i hr@foo.com e-mail adresi. Greška prikazana korisniku se pojavljuje ispod:

Greška: kršenje PRIMARY KEY ograničenja 'PK_employee_id'. Ne mogu uložiti duplikat ključa u objekt "dbo.employees". Mail je u redu.

Najvažnije, izvršenje aplikacija se nastavlja normalno, omogućavajući programeru da graciozno upravlja greškom. Korišćenje TRY ... izraza CATCH je elegantan način proaktivno otkrivanje i rukovanje greškama koje se javljaju u aplikacijama SQL Server baze podataka.

Učite više

Ako želite saznati više o strukturiranom jeziku upita, pročitajte Uvod u SQL .