Isang Hakbang-Sa pamamagitan ng Hakbang-Gabay sa Paggamit ng TRY ... CATCH upang mahawakan ang SQL Server Error

Kilalanin ang mga error nang hindi nakakaabala ang pagpapatupad

Ang TRY ... CATCH pahayag sa Transact- SQL nakita at pinangangasiwaan ang mga kondisyon ng error sa iyong mga application ng database. Ang pahayag na ito ay ang pundasyon ng paghawak ng error sa SQL Server at isang mahalagang bahagi ng pagbuo ng magagaling na mga aplikasyon ng database. Subukan ... Ang CATCH ay nalalapat sa SQL Server simula sa 2008, Azure SQL Database, Azure SQL Data Warehouse at Parallel Data Warehouse.

Ipinakikilala ang TRY..CATCH

Subukan ... Gumagana ang CATCH sa pamamagitan ng pagpapahintulot sa iyo na tukuyin ang dalawang pahayag ng Transact-SQL: isang nais mong "subukan" at isa pang gamitin upang "mahuli" ang anumang mga error na maaaring lumabas. Kapag nakatagpo ng SQL Server ang isang TRY ... CATCH na pahayag, agad itong nagsasagawa ng pahayag na kasama sa TRY clause. Kung matagumpay ang pagpapatupad ng TRY, ang SQL Server ay gumagalaw lamang. Gayunpaman, kung ang pahayag ng TRY ay bumubuo ng isang error, pinapatupad ng SQL Server ang pahayag ng CATCH upang mai-handle ang error.

Ang batayang syntax ay tumatagal ng form na ito:

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

Subukan ... Halimbawa ng CATCH

Ito ay pinakamadaling maintindihan ang paggamit ng pahayag na ito sa pamamagitan ng paggamit ng isang halimbawa. Isipin na ikaw ang tagapangasiwa ng isang database ng human resources na naglalaman ng talahanayang nagngangalang "Mga empleyado," na naglalaman ng impormasyon tungkol sa bawat empleyado sa iyong samahan. Ang talahanayan na iyon ay gumagamit ng isang numerong numero ng empleyado ng empleyado bilang pangunahing susi . Maaari mong subukang gamitin ang pahayag sa ibaba upang magsingit ng bagong empleyado sa iyong database:

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

Sa ilalim ng normal na pangyayari, ang pahayag na ito ay magdagdag ng hilera sa talahanayan ng mga empleyado. Gayunpaman, kung ang isang empleyado na may ID 12497 ay mayroon na sa database, ang pagpasok ng hilera ay lumalabag sa pangunahing hadlang at magresulta sa sumusunod na error:

Msg 2627, Antas 14, Estado 1, Linya 1 Paglabag sa PRIMARY KEY constraint 'PK_employee_id'. Hindi puwedeng magsingit ng duplicate key sa 'dbo.employees' ng object. Tinapos ang pahayag.

Habang ang error na ito ay nagbibigay sa iyo ng impormasyon na kailangan mo upang i-troubleshoot ang problema, mayroong dalawang mga isyu dito. Una, ang mensahe ay misteriyoso. Kabilang dito ang mga code ng error, mga numero ng linya at iba pang impormasyon na hindi maintindihan sa karaniwang gumagamit. Pangalawa, at higit na mahalaga, nagiging sanhi ito ng pahayag upang i-abort at maaaring maging sanhi ng pag-crash ng application.

Ang alternatibo ay upang balutin ang pahayag sa TRY ... CATCH statement, tulad ng ipinapakita sa ibaba:

Magsimula kang magsimula 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 = 'Nagkaroon ng isang error na lumilikha ng isang bagong rekord ng empleyado.', @ Subjek = 'Error sa Pag-duplicate ng Employee ID'; END CATCH

Sa halimbawang ito, ang anumang mga error na nangyari ay iniulat sa parehong gumagamit na nagsasagawa ng command at ang hr@foo.com e-mail address. Ang error na ipinapakita sa gumagamit ay lilitaw sa ibaba:

Error: Paglabag sa PRIMARY KEY constraint na 'PK_employee_id'. Hindi puwedeng magsingit ng duplicate key sa 'dbo.employees' ng object. Na-queued ang mail.

Pinakamahalaga, ang pagpapatupad ng application ay normal, na pinapayagan ang programmer na maingat na mapangasiwaan ang error. Paggamit ng TRY ... CATCH pahayag ay isang eleganteng paraan upang proactively tuklasin at hawakan ang mga error na nangyari sa SQL Server application database.

Pag-aaral ng Higit Pa

Kung nais mong matuto nang higit pa tungkol sa Nakabalangkas na Wika ng Query, basahin ang Panimula sa SQL .