Step-by-Step gida bat erabiltzea TRY ... CATCH SQL Server akatsak kudeatzeko

Akatsak identifikatzea exekuzioa eten gabe

TRY ... CATCH transakzio-en adierazpenak SQL datu basean dauden akatsen baldintzak detektatzen eta maneiatzen ditu. Jakinarazpen hau SQL Server erroreen manipulazioaren ardatza da eta datu base sendoen aplikazioak garatzen parte garrantzitsua da. TRY ... CATCH SQL Server aplikatzen zaie 2008an hasita, Azure SQL Database, Azure SQL Datu-biltegia eta Paralelo Datuen biltegia.

TRY .. KATCH aurkezten

TRY ... CATCH-ek funtzionatzen du bi Transact-SQL adierazpenak zehazteko: "saiatu" nahi duzun eta beste bat "harrapatzeko" sor daitezkeen akatsak erabiltzeko. SQL Server-k TRY bat topatzen duenean ... CATCH adierazpena, TRY klausulan sartutako adierazpena exekutatzen du berehala. TRY deklarazioa ondo exekutatzen bada, SQL Server-a besterik gabe mugitzen da. Hala eta guztiz ere, TRY adierazpenak errore bat sortzen badu, SQL Server-k CATCH adierazpena exekutatzen du akatsa modu egokian kudeatzeko.

Oinarrizko sintaxiak honako hau hartzen du:

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

TRY ... CATCH Adibidea

Errazena da adierazpen honen erabilera ulertzeko adibide baten bidez. Imajinatu "zure langile" izeneko taula bat duen giza baliabideen datu-base baten administratzailea zarela zure erakundeko langile bakoitzari buruzko informazioa. Taula honek zenbaki oso bat erabiltzen du langile ID zenbakia lehen mailako gakoa den bezala . Beheko adierazpena erabili nahi baduzu, langile berri bat zure datu-basera sartu ahal izango duzu:

INSERT INTO langileei (id, first_name, last_name, extension) VALUES (12497, 'Mike', 'Chapple', 4201)

Egoera normaletan, adierazpen honek Langile taulan errenkada bat gehituko luke. Hala ere, 12497 zenbakiarekin dagoeneko dagoeneko badago datu-basekoan, errenkadak lehen mailako gakoaren murriztapena urratzen du eta honako errore hau gertatu da:

Ms 2627, 14. maila, 1. estatua, 1. lerroa KLAUSULA OINARRIA "PK_employee_id" urratzea. Ezin da bikoiztu tekla txertatzeko 'dbo.employees' objektuan. Adierazpena amaitu da.

Akats honek arazoari aurre egiteko behar duen informazioa ematen duen bitartean, bi arazo daude. Lehenik eta behin, mezua kriptan dago. Errore-kodeak, lineako zenbakiak eta bestelako informazioa erabiltzailearentzako ulergaitzak dira. Bigarrenik, eta garrantzitsuagoa dena, akatsa abortatzea eragiten du eta aplikazio baten hutsegitea eragin dezake.

Alternatiboa adierazpen bat itzulbiratu TRY batean ... CATCH adierazpena, behean erakusten den bezala:

BEGIN TRY INSERT INTO langileei (id, first_name, last_name, extension) VALUES (12497, 'Mike', 'Chapple', 4201) END TRY BEGIN IMITAZIOA 'Errorea:' ERROR_MESSAGE (); EXEC msdb.dbo.sp_send_dbmail @profile_name = 'Langilearen posta', @recipients = 'hr@foo.com', @body = 'Errorea gertatu da langileen erregistro berria sortzean.', @subject = 'Langileen identifikazioaren bikoizketa-errorea'; END CATCH

Adibide honetan, gertatzen diren akatsak komandoa exekutatzen duten erabiltzaileei eta hr@foo.com helbide elektronikoari jakinarazten zaizkie. Erabiltzaileari erakutsitako errorea behean agertzen da:

Errorea: 'PK_employee_id' lehentasunezko KEYren murrizketa. Ezin da bikoiztu tekla txertatzeko 'dbo.employees' objektuan. Posta elektronikoa.

Garrantzitsuena, aplikazioaren exekuzioa izaten jarraitzen du normalean, programatzaileak akatsa erraz kudeatzeko aukera ematen du. TRY erabilpena ... CATCH adierazpena SQL Server datu-baseko aplikazioetan gertatzen diren akatsak detektatzeko eta kudeatzeko modu dotorea da.

Gehiago ikastea

Query Structured Query buruzko informazio gehiago nahi baduzu, irakurri SQL Sarrera .