Samm-sammult käsiraamat, mis kasutab TRY ... CATCH töödelda SQL Serveri vigu

Tuvastage vead ilma täitmise katkestamata

TRACT ... TRANSLEERITUD ... CATCH avaldus Transact- SQL tuvastab ja käitleb teie andmebaasi rakendustes vigu. See avaldus on SQL Serveri veakäsitluse nurgakivi ja on oluline roll tugeva andmebaasrakenduste väljatöötamisel. TRY ... CATCH kehtib SQL Serveri kohta, alates 2008. aastast, Azure'i SQL-andmebaasist, Azure SQL-i andmekogust ja paralleelset andmekogu.

Tutvustame TRY..CATCH

TRY ... CATCH töötab, võimaldades teil määrata kaks Transact-SQL-i avaldust: üks, mida soovite "proovida" ja teine, et "püüda" vigu, mis võivad tekkida. Kui SQL Server kohtab TRY ... CATCH avaldust, täidab ta viivitamatult TRY-i klausliga lisatud avalduse. Kui TRY avaldus toimib edukalt, liigub SQL Server lihtsalt sisse. Kuid kui TRY avaldus tekitab viga, käivitab SQL Server CATCH avalduse vea graatsiliselt käsitsema.

Põhiline süntaks võtab selle vormi:

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

TRY ... CATCH näide

Kõige lihtsam on mõista selle avalduse kasutamist näite kasutamise abil. Kujutage ette, et olete inimressursside andmebaasi administraator, mis sisaldab tabelit "Töötajad", mis sisaldab teavet teie ettevõtte kõigi töötajate kohta. See tabel kasutab esmaseks võtmeks täisarvu töötaja ID-numbrit. Uue töötaja sisestamiseks oma andmebaasi võite proovida allpool toodud avaldust kasutada:

INSERT INTO töötajatele (id, eesnimi, last_nimi, laiend) VALUES (12497, 'Mike', 'Chapple', 4201)

Tavalistes tingimustes lisatakse see avaldus töötajate tabeli rida. Kui aga andmebaasi juba olemas on töötaja ID-ga 12497, rikub rea lisamine peamise võtmepiirangu ja tekitab järgmise vea:

Msg 2627, tase 14, riik 1, rida 1 PRIMARY KEY piirangu rikkumine 'PK_employee_id'. Objekti dbo.employees ei saa lisada topeltklahvi. Avaldus on lõpetatud.

Kuigi see tõrge annab teile teavet, mida vajate probleemi tõrkeotsinguks, on sellel kaks probleemi. Esiteks on sõnum märmatud. See sisaldab veakoode, reanumbreid ja muud teavet, mis on keskmisele kasutajale arusaamatu. Teiseks ja mis veelgi olulisem, see põhjustab avalduse katkestamise ja võib põhjustada rakenduse krahhi.

Alternatiiviks on avalduse trükkimine TRY ... CATCH avalduses, nagu allpool näidatud:

BEGIN TRY INSERT INTO töötajatele (ID, eesnimi, last_name, laiend) VALUES (12497, 'Mike', 'Chapple', 4201) END TRY BEGIN CATCH PRINT 'Viga:' + ERROR_MESSAGE (); EXEC msdb.dbo.sp_send_dbmail @profile_name = 'Employee Mail', @ recipients = 'hr@foo.com', @body = 'tekkis viga uue töötaja kirje loomiseks.', @subject = 'Employee ID dubleerimise viga'; END CATCH

Selles näites teatatakse kõigist tekkivatest vigadest nii käsu käivitajale kui hr@foo.com e-posti aadressile. Allpool kuvatakse kasutajale kuvatud veateade:

Viga: PRIMARY KEY piirangu rikkumine 'PK_employee_id'. Objekti dbo.employees ei saa lisada topeltklahvi. Postitus järjekorras.

Kõige tähtsam on see, et rakenduse rakendamine jätkub normaalselt, võimaldades programmeerijal vead graatsiliselt käsitseda. TRY ... CATCH avalduse kasutamine on elegantne viis SQL Serveri andmebaasi rakendustes esinevate vigade avastamiseks ja nende käitlemiseks.

Õppida rohkem

Kui soovite rohkem teavet struktureeritud päringuliigi kohta, lugege SQL-i sissejuhatus .