Korak za korakom po navodilih za uporabo TRY ... CATCH za ravnanje z napakami SQL Server

Ugotovite napake brez prekinitve izvajanja

Stavek TRY ... CATCH v Transact- SQL zazna in obravnava pogoje napak v aplikacijah zbirke 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 izvede, SQL Server preprosto nadaljuje. Če pa izjava TRY ustvari napako, SQL Server izvrši izjavo CATCH, da bi z grajsko obdelal napako.

Osnovna sintaksa je ta oblika:

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

TRY ... CATCH Primer

Najlažje je razumeti uporabo te izjave z uporabo primera. 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) VALUES (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, Level 14, State 1, Line 1 Krš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, sta z njo povezani dve težavi. Prvič, sporočilo je kriptično. Vključuje kode napak, številke vrstic in druge podatke, ki se ne razumejo 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 spodaj:

BEGIN TRY INSERT INTO v zaposlene (id, first_name, last_name, extension) VREDNOSTI (12497, 'Mike', 'Chapple', 4201) END TRY BEGIN PRINT CATCH PRINT 'Napaka:' + ERROR_MESSAGE (); EXEC msdb.dbo.sp_send_dbmail @profile_name = 'Zaposleni pošta', @recipients = 'hr@foo.com', @body = 'Prišlo je do napake pri ustvarjanju novega zapisa zaposlenih.', @subject = 'Napaka pri podvajanju 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 hr@foo.com. Napaka, prikazana uporabniku, je prikazana spodaj:

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.

Najpomembneje je, da se izvajanje programa normalno nadaljuje, kar programeru omogoča, 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, preberite Uvod v SQL .