Usa ka Gisundan nga Gisundan nga Giya sa Paggamit sa Pagsulay ... PAGKATAPOS sa mga Kasaypanan sa SQL Server

Ilha ang mga kasaypanan nga dili maputol ang pagpatay

Ang TRY ... CATCH nga pahayag sa Transact- SQL nga nakatag-an ug nagdumala sa mga kondisyon sa sayop sa imong aplikasyon sa database. Kini nga pamahayag mao ang sukaranan sa SQL Server nga sayop nga pagdumala ug usa ka mahinungdanon nga bahin sa pagpalambo og maayo nga mga aplikasyon sa database. SULAYI ... Magamit sa SQL Server sugod sa 2008, Azure SQL Database, Azure SQL Data Warehouse ug Parallel Data Warehouse.

Pagpaila sa TRY..CATCH

SULAYI ... Ang CATCH nagtrabaho pinaagi sa pagtugot kanimo sa paghatag sa duha ka Transact-SQL nga mga pahayag: usa nga gusto nimo nga "sulayan" ug lain nga gamiton aron "makadakop" sa bisan unsang mga sayop nga mahimong motungha. Sa diha nga ang SQL Server makasinati sa usa ka pagsulay ... CATCH nga pamahayag, kini gilayon nga gipatuman ang pamahayag nga gilakip sa TRY clause. Kon ang TRY nga pahayag malampuson nga matuman, ang SQL Server magpadayon lamang. Bisan pa, kon ang TRY nga pahayag magamugna og usa ka sayop, ang SQL Server nagpatuman sa CATCH nga pahayag aron sa madanihon nga pagdumala sa sayop.

Ang batakang syntax nagkinahanglan niini nga porma:

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

SULAYI ... SAKSI Pananglitan

Sayon nga masabtan ang paggamit niini nga pahayag pinaagi sa paggamit sa usa ka panig-ingnan. Hunahunaa nga ikaw ang tagdumala sa usa ka database sa human resources nga naglangkob sa usa ka lamesa nga ginganlan nga "Mga empleyado," nga adunay impormasyon bahin sa matag empleyado sa imong organisasyon. Ang lamesa naggamit sa usa ka numero sa empleyado sa empleyado isip ang una nga yawe . Mahimo nimong sulayan nga gamiton ang pahayag sa ubos aron ipasulod ang bag-ong empleyado sa imong database:

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

Ubos sa normal nga mga kahimtang, kini nga pahayag makadugang sa usa ka laray ngadto sa empleyado nga lamesa. Apan, kung ang usa ka empleyado nga adunay ID 12497 anaa na sa database, ang pagsal-ot sa laray laglagon ang pangunang hinungdan nga pagpugong ug moresulta sa mosunod nga sayop:

Msg 2627, Level 14, State 1, Linya 1 Paglapas sa PRIMARY KEY constraint 'PK_employee_id'. Dili mahimong isulod ang doble nga yawe sa object 'dbo.employees'. Ang pamahayag natapos na.

Samtang kini nga sayop naghatag kanimo sa kasayuran nga imong gikinahanglan aron masulbad ang problema, adunay duha ka mga isyu niini. Una, ang mensahe misteryoso. Naglakip kini sa mga code sa sayop, mga numero sa linya ug ubang kasayuran nga dili masabtan sa kasagaran nga tiggamit. Ikaduha, ug labaw sa tanan, kini makapahunong sa pahayag ug mahimong hinungdan sa pagkahugno sa aplikasyon.

Ang alternatibo mao ang pagbungkag sa pahayag sa TRY ... CATCH nga pahayag, ingon sa gipakita sa ubos:

Sugdi ang pagsulay sa mga empleyado (id, first_name, last_name, extension) VALUES (12497, 'Mike', 'Chapple', 4201) END TRY BEGIN CATCH PRINT 'Error:' + ERROR_MESSAGE (); EXEC msdb.dbo.sp_send_dbmail @profile_name = 'Employee Mail', @recipients = 'hr@foo.com', @body = 'Ang usa ka kasaypanan nahitabo sa paghimo sa usa ka bag-o nga rekord sa empleyado.', @ Subject = 'Employee ID Duplication Error'; KATAPUSANG KATAPUSAN

Sa niini nga pananglitan, ang bisan unsang mga kasaypanan nga mahitabo gitaho ngadto sa user nga nagpatuman sa sugo ug sa hr@foo.com e-mail address. Ang sayup nga gipakita sa user makita sa ubos:

Sayop: Paglapas sa PRIMARYYONG KEY nga pagpugong 'PK_employee_id'. Dili mahimong isulod ang doble nga yawe sa object 'dbo.employees'. Gilinya ang sulat.

Labing mahinungdanon, ang pagpatuman sa aplikasyon nagpadayon sa kasagaran, nga nagtugot sa programmer sa pagkamaayo nga pagdumala sa sayup. Ang paggamit sa TRY ... CATCH nga pahayag usa ka matahum nga paagi sa proactively detect ug pagdumala sa mga kasaypanan nga mahitabo sa SQL Server database applications.

Pagkat-on og Dugang

Kon gusto ka nga makakat-on pa mahitungod sa Structured Query Language, basaha ang Pasiuna sa SQL .