Korak-po-korak vodič za korištenje TRY ... CATCH za rukovanje SQL Server pogreške

Utvrdite pogreške bez prekidanja izvršenja

TRY ... CATCH izjava u Transact- SQL detektira i rješava uvjete pogreške u vašim aplikacijama baze podataka. Ova izjava je kamen temeljac za rukovanje pogreškama u sustavu SQL Server i važan je dio razvijanja robustan aplikacija baze podataka. Pokušajte ... CATCH se odnosi na SQL Server počevši od 2008, Azure SQL baze podataka, Azure SQL Data Warehouse i Paralelni podaci skladište.

Predstavljamo TRY..CATCH

Pokušajte ... CATCH djela dopuštajući vam da odredite dvije Transact-SQL izjave: one koje želite "probati", a drugi koristiti za "uhvatiti" bilo koje pogreške koje bi mogle nastati. Kada se SQL Server susreće s izjavom TRY ... CATCH, odmah izvršava izjavu koja je uključena u klauzulu TRY. Ako se TRY izjava uspješno izvršava, SQL Server se jednostavno pomiče. Međutim, ako izjava TRY generira pogrešku, SQL Server izvršava CATCH izjavu kako bi graciozno riješila pogrešku.

Osnovna sintaksa ima ovaj oblik:

BEGIN TRY {sql_statement | statement_block} KRAJ TRY POKRIVLJUJUJUĆI [{sql_statement | statement_block}] END CATCH [; ]

Pokušajte ... CATCH Primjer

Najlakše je razumjeti upotrebu ove izjave pomoću primjera. Zamislite da ste administrator baze podataka o ljudskim resursima koji sadrži tablicu pod nazivom "Zaposlenici", koja sadrži informacije o svakom zaposleniku u vašoj organizaciji. Ta tablica koristi cijeli broj zaposlenika kao primarni ključ . Možete pokušati upotrijebiti izjavu u nastavku kako biste umetnuli novi zaposlenik u svoju bazu podataka:

INSERT INTO zaposlenika (id, first_name, last_name, extension) VRIJEDNOSTI (12497, 'Mike', 'Chapple', 4201)

U normalnim okolnostima, ta će izjava dodati red na tablicu zaposlenika. Međutim, ako je zaposlenik s ID-om 12497 već u bazi podataka, umetanje retka krši ograničenje primarnog ključa i dovodi do sljedeće pogreške:

Poruka 2627, razina 14, država 1, linija 1 Povreda PRIMARY KEY ograničenja 'PK_employee_id'. Nije moguće umetnuti duplikat ključa u objekt "dbo.employees". Izjava je ukinuta.

Iako vam ta pogreška pruža informacije potrebne za otklanjanje poteškoća, s njim postoje dva problema. Prvo, poruka je čuvena. To uključuje kodove pogrešaka, brojeve linija i druge informacije nerazumljivom prosječnom korisniku. Drugo, što je još važnije, uzrokuje da se izjava poništi i može uzrokovati pad aplikacije.

Alternativa je zamotati izjavu u izjavi TRY ... CATCH, kao što je prikazano u nastavku:

POČETITE POKUŠAJU INSPEKTIRAJUĆI UPRAVE (id, first_name, last_name, extension) VRIJEDNOSTI (12497, 'Mike', 'Chapple', 4201) EXEC msdb.dbo.sp_send_dbmail @profile_name = 'Zaposlenik e-pošte', @recipients = 'hr@foo.com', @body = 'Došlo je do pogreške u stvaranju novog zapisa zaposlenika.', @subject = 'Pogreška dupliciranja zaposlenika ID'; ZAVRŠAVANJE

U ovom primjeru sve pogreške koje se javljaju prijavljuju se i korisniku koji izvršava naredbu i e-mail adresu hr@foo.com. U nastavku se prikazuje pogreška prikazana korisniku:

Pogreška: Kršenje PRIMARY KEY ograničenja 'PK_employee_id'. Nije moguće umetnuti duplikat ključa u objekt "dbo.employees". Mail je u redu čekanja.

Ono što je najvažnije, izvršavanje programa nastavlja se normalno, što programeru omogućuje graciozno rješavanje pogreške. Korištenje TRY ... CATCH izjava je elegantan način za proaktivno otkrivanje i rješavanje pogrešaka koje se javljaju u aplikacijama baza podataka SQL Server.

Učenje više

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