Një udhëzues hap pas hapi për të përdorur TRY ... CATCH për të trajtuar gabimet e SQL Server

Identifikoni gabimet pa ndërprerë ekzekutimin

TRY ... Deklarata CATCH në Transact- SQL zbulon dhe trajton kushtet e gabimit në aplikacionet tuaja të bazës së të dhënave. Kjo deklaratë është gurthemeli i trajtimit të gabimeve të SQL Server dhe është një pjesë e rëndësishme e zhvillimit të aplikacioneve të bazës së të dhënave të fuqishme. TRY ... CATCH vlen për SQL Server duke filluar me 2008, Azure SQL Baza e të dhënave, Azure SQL Data Warehouse dhe Paralel Warehouse të dhënave.

Prezantimi i TRY..CATCH

TRY ... CATCH punon duke ju lejuar të specifikoni dy deklarata Transact-SQL: një që doni të "provoni" dhe një tjetër që të përdorni për të "kapur" gabimet që mund të lindin. Kur SQL Server ndesh një deklaratë TRY ... CATCH, ajo menjëherë ekzekuton deklaratën e përfshirë në klauzolën TRY. Nëse deklarata TRY ekzekutohet me sukses, SQL Server thjesht lëviz. Megjithatë, nëse deklarata TRY gjeneron një gabim, SQL Server ekzekuton deklaratën CATCH për të trajtuar gabimisht gabimin.

Sintaksa bazë merr këtë formë:

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

TRY ... SHEMBULL Shembull

Është më e lehtë të kuptohet përdorimi i kësaj deklarate nëpërmjet përdorimit të një shembulli. Imagjinoni që ju jeni administratori i një baze të të dhënave të burimeve njerëzore që përmban një tabelë të quajtur "Punonjësit", që përmban informacion rreth secilit prej punonjësve në organizatën tuaj. Kjo tabelë përdor një numër të plotë punonjës ID si çelësin kryesor . Ju mund të përpiqeni të përdorni deklaratën e mëposhtme për të futur një punonjës të ri në bazën tuaj të të dhënave:

INSERT INTO punonjësit (id, first_name, last_name, extension) VLERAT (12497, 'Mike', 'Chapple', 4201)

Nën rrethana normale, kjo deklaratë do të shtonte një rresht në tryezën e Punonjësve. Megjithatë, nëse një punonjës me ID 12497 tashmë ekziston në bazën e të dhënave, futja e rreshtit do të shkelte kufizimet kryesore të çelësit dhe do të rezultonte në gabimin e mëposhtëm:

Msg 2627, Niveli 14, Shtetit 1, Linja 1 Shkelja e Kufirit PRIMARY KEY 'PK_employee_id'. Nuk mund të futni çelësin e kopjuar në 'dbo.employees' të objektit. Deklarata është ndërprerë.

Ndërsa ky gabim ju ofron informacionin që ju nevojitet për të zgjidhur problemin, ka dy çështje me të. Së pari, mesazhi është i fshehtë. Ai përfshin kodet e gabimit, numrat e linjës dhe informacione të tjera të pakuptueshme për përdoruesin mesatar. Së dyti, dhe më e rëndësishmja, kjo shkakton që deklarata të ndërpritet dhe mund të shkaktojë rrëzimin e aplikacionit.

Alternativa është mbyllja e deklaratës në një deklaratë TRY ... CATCH, siç tregohet më poshtë:

BEGIN TRY INSERT NË punonjësit (id, first_name, last_name, extension) VLERAT (12497, 'Mike', 'Chapple', 4201) END TRY BEGIN PRINCE CATCH 'Gabim:' + ERROR_MESSAGE (); EXEC msdb.dbo.sp_send_dbmail @profile_name = 'Punonjësi Mail', @recipients = 'hr@foo.com', @body = 'Ndodhi një gabim në krijimin e një rekordi të ri punonjësish.', @subject = 'Gabim i Duplikimit të Punonjësve ID'; FERIZIMI I FUNDIT

Në këtë shembull, çdo gabim që ndodh raportohet tek përdoruesi që ekzekuton komandën dhe adresën e e-mailit hr@foo.com. Gabimi i treguar përdoruesit duket më poshtë:

Gabim: Shkelja e kufizimit PRIMARY KEY 'PK_employee_id'. Nuk mund të futni çelësin e kopjuar në 'dbo.employees' të objektit. Posta në radhë.

Më e rëndësishmja, ekzekutimi i aplikacioneve vazhdon normalisht, duke i lejuar programuesit që të trajtojë gabimisht gabimin. Përdorimi i TRY ... Deklarata CATCH është një mënyrë elegante për të zbuluar proaktive dhe për të trajtuar gabimet që ndodhin në aplikacionet e bazës së të dhënave SQL Server.

Mësoni më shumë

Nëse dëshironi të mësoni më shumë për strukturën e gjuhës së pyetjeve, lexoni Hyrje në SQL .