Skip to main content

Uporaba TRY ... CATCH za ravnanje z napakami SQL Server

Anonim

Stavek TRY … CATCH v programu Transact-SQL zazna in obravnava napake v aplikacijah baz podatkov. Ta izjava je temelj ravnanja z napakami SQL Server in je pomemben del razvoja robustnih aplikacij baz podatkov. TRY … CATCH velja za SQL Server, ki se začne z letom 2008, Azure SQL Database, Azure SQL Warehouse in Parallel Data Warehouse.

Uvedba TRY … CATCH

TRY … CATCH deluje tako, da vam omogoča določitev dveh izjav Transact-SQL: tistega, ki ga želite »preizkusiti« in drugega, da uporabite za »ulov« morebitnih napak. Ko SQL Server naleti na izjavo TRY … CATCH, takoj izvrši izjavo, vključeno v klavzulo TRY. Če se izjava TRY uspešno izvaja, se SQL Server vklopi. Če izjava TRY ustvari napako, SQL Server izvrši izjavo CATCH, da bo prelomno obvladal napako.

Osnovna sintaksa je ta oblika:

BEGIN TRY blok izjave END TRYUČINKOVITE ULTRAsql_statementEND CATCH ;

TRY … CATCH Primer

Lažje je razumeti uporabo te izjave z zgledom. Predstavljajte si, da ste skrbnik baze podatkov o človeških virih, ki vsebuje tabelo z imenom "Zaposleni", ki vsebuje informacije o vsakem zaposlenem v vaši organizaciji. V tej tabeli je kot primarni ključ uporabljena celostna identifikacijska številka zaposlenega. Poskusite uporabiti spodnjo izjavo, da v svojo bazo podatkov vstavite novega zaposlenega:

INSERT INTO employees (id, first_name, last_name, extension)VREDNOSTI (12497, "Mike", "Chapple", 4201)

V normalnih okoliščinah bi ta izjava dodala vrstico tabeli Zaposleni. Če pa zaposleni s ID 12497 že obstaja v bazi podatkov, bi vstavitev vrstice kršila omejitev primarnega ključa in povzročila naslednjo napako:

Msg 2627, stopnja 14, stanje 1, vrstica 1Kršitev omejitve PRIMARY KEY "PK_employee_id". V objekt »dbo.employees« ni mogoče vstaviti podvojenega ključa.Izjava je bila prekinjena.

Medtem ko vam ta napaka vsebuje informacije, ki jih potrebujete za odpravljanje težave, z njo obstajajo dve težavi. Prvič, sporočilo je kriptično. Vključuje kode napak, številke vrstic in druge informacije, ki so nerazumljive povprečnemu uporabniku. Drugič, in še pomembneje, povzroči, da se izjava prekine in lahko povzroči zrušitev aplikacije.Druga možnost je, da obdržite izjavo v izjavi TRY … CATCH, kot je prikazano tukaj:

BEGIN TRYINSERT INTO employees (id, first_name, last_name, extension)VREDNOSTI (12497, "Mike", "Chapple", 4201)END TRYUČINKOVITE ULTRAPRINT 'ERROR:' + ERROR_MESSAGE ();EXEC msdb.dbo.sp_send_dbmail@profile_name = 'Pošta zaposleni',@recipients = '[email protected]',@body = 'Prišlo je do napake pri ustvarjanju novega zapisa zaposlenih.',@subject = 'Napaka podvajanja ID-ja zaposlenih';END CATCH

V tem primeru se vse napake, ki se pojavijo, sporočijo uporabniku, ki izvršuje ukaz, in e-poštni naslov [email protected]. Napaka, prikazana uporabniku je:

Napaka: kršitev omejitve PRIMARY KEY "PK_employee_id". V objekt »dbo.employees« ni mogoče vstaviti podvojenega ključa.Pošta je v čakalni vrsti.

Izvajanje programa se običajno nadaljuje, tako da lahko programator obvlada napako. Uporaba izjave TRY … CATCH je eleganten način za proaktivno zaznavanje in obvladovanje napak, ki se zgodijo v aplikacijah baze podatkov SQL Server.

Učenje več

Če želite izvedeti več o strukturiranem jeziku poizvedb, si oglejte Uvod v SQL.