Uporaba TRY / CATCH za obvladovanje napak strežnika SQL

click fraud protection

Stavek TRY / CATCH v Transact-SQL zazna in obravnava pogoje napak v aplikacijah baz podatkov. Ta izjava je temeljni kamen SQL Ravnanje z napakami strežnika in je pomemben del razvoja robustnih aplikacij baz podatkov.

TRY / CATCH velja za SQL Server, začenši z 2008, Azure SQL Database, Azure SQL Data Warehouse in Parallel Data Warehouse.

Predstavljamo TRY / CATCH

TRY./CATCH deluje tako, da določi dva stavka Transact-SQL: enega, ki ga želite »poskusiti«, in drugega, ki ga želite uporabiti za »ulov« morebitnih napak. Ko SQL Server naleti na stavek TRY / CATCH, takoj izvrši stavek, vključen v stavek TRY. Če se stavek TRY uspešno izvede, SQL Server nadaljuje. Če pa stavek TRY ustvari napako, SQL Server izvrši stavek CATCH, da napako obravnava elegantno.

Osnovna skladnja ima to obliko:

ZAČNITE POSKUSATI
{sql_statement | blok izpiska}
KONČNI POSKUS
ZAČNITE UJEM
[{sql_statement | izjava_blok}]
KONEC ULOVA
[; ]

Primer TRY / CATCH

Razmislite o zbirki podatkov o človeških virih, ki vsebuje tabelo z imenom

instagram viewer
zaposlenih, ki vsebuje informacije o vsakem od zaposlenih v podjetju. Ta tabela uporablja celoštevilčno ID številko zaposlenega kot primarni ključ.

Lahko uporabite spodnjo izjavo, da v bazo podatkov vstavite novega zaposlenega:

INSERT INTO zaposlenih (id, ime_ime, priimek, razširitev)
VREDNOTE (12497, 'Mike', 'Chapple', 4201)

V običajnih okoliščinah bi ta izjava dodala vrstico v tabelo Zaposleni. Če pa zaposleni z ID 12497 že obstaja v zbirki podatkov, bi vstavljanje vrstice kršilo omejitev primarnega ključa in povzročilo naslednjo napako:

Sporočilo 2627, stopnja 14, stanje 1, vrstica 1
Kršitev omejitve PRIMARNEGA KLJUČA 'PK_employee_id'. V predmet 'dbo.employees' ni mogoče vstaviti podvojenega ključa.
Izjava je prekinjena.

Medtem ko vam ta napaka ponuja informacije, ki jih potrebujete za odpravljanje težave, obstajata dve težavi. Prvič, sporočilo je skrivnostno. Vključuje kode napak, številke vrstic in druge informacije, ki so povprečnemu uporabniku nerazumljive. Drugič, kar je še pomembneje, povzroči, da stavek prekine in lahko povzroči zrušitev aplikacije.

Druga možnost je, da izjavo zavijete v izjavo TRY... CATCH, kot je prikazano tukaj:

ZAČNITE POSKUSATI
INSERT INTO zaposlenih (id, ime_ime, priimek, razširitev)
VREDNOTE (12497, 'Mike', 'Chapple', 4201)
KONČNI POSKUS
ZAČNITE UJEM
PRINT 'ERROR:' + ERROR_MESSAGE ();
EXEC msdb.dbo.sp_send_dbmail
@profile_name = 'Pošta zaposlenih',
@recipients = '[email protected]',
@body = 'Pri ustvarjanju novega zapisa zaposlenega je prišlo do napake.',
@subject = 'Napaka baze podatkov zaposlenih';
KONEC ULOVA

V tem primeru se o morebitnih napakah poroča uporabniku, ki izvaja ukaz, in e-poštnemu naslovu [email protected]. Napaka, prikazana uporabniku, je:

Napaka: Kršitev omejitve PRIMARNEGA KLJUČA 'PK_employee_id'. 
V predmet 'dbo.employees' ni mogoče vstaviti podvojenega ključa.
Pošta je v čakalni vrsti.

Izvajanje aplikacij se nadaljuje normalno, kar programerju omogoča, da napako obravnava. Uporaba stavka TRY / CATCH je eleganten način za proaktivno odkrivanje in obvladovanje napak, ki se pojavijo v aplikacijah zbirke podatkov SQL Server.

Učenje več

Če želite izvedeti več o jeziku strukturiranih poizvedb, si oglejte naš članek Osnove SQL.

instagram story viewer