Stiùireadh air Ceum-le-Ceum a 'cleachdadh TRY ... A' CUR AIR SGRÙDADH FREAGAIRT SQL

Comharraich mearachdan gun a bhith a 'cur bacadh air gnìomh

An TRY ... Aithris CATCH ann an Transact- SQL a ' lorg agus a' làimhseachadh mearachd sna tagraidhean stòr-dàta agad. Is e an aithris seo clach-oisinn làimhseachadh mearachd an t-Seirbheis SQL agus tha e na phàirt chudromach de bhith a 'leasachadh iarrtasan stòr-dàta làidir. TRY ... Tha CATCH a 'buntainn ri Freiceadan SQL a' tòiseachadh le 2008, Azure Database SQL, Azure Data Warehouse agus Co-shìnte Dàta Warehouse.

A 'toirt a-steach TRY..CATCH

TRY ... Bidh CATCH ag obair le bhith a 'leigeil leat dà aithris Transact-SQL a shònrachadh: fear a tha thu airson "feuchainn" agus fear eile a chleachdas gus mearachdan sam bith a dh'fhaodadh èirigh. Nuair a choinnicheas SQL Freiceadan SQL ... aithris CATCH, bidh e a 'ruith a-mach sa bhad an aithris a tha air a ghabhail a-steach ann an clàs TRY. Ma shoirbhicheas leis an aithris TRY gu soirbheachail, tha am frithealaiche SQL dìreach a 'gluasad air adhart. Ge-tà, ma tha an aithris TRY a 'dèanamh mearachd, bidh frithealaiche SQL a' cur a-mach aithris CATCH gus an mearachd a làimhseachadh gu grinn.

Tha an co-chòrdadh bunaiteach a 'gabhail ris an fhoirm seo:

BEGIN TRY {sql_statement | statement_block} DEALBH-SGRÌOBH AN SEO [{sql_statement | statement_block}] END CATCH [; ]

TRY ... CATCH eisimpleir

Tha e nas fhasa tuigsinn an cleachdadh seo le bhith a 'cleachdadh eisimpleir. Smaoinich gur e rianaire stòr-dàta stòrasan daonna a th 'ann a tha a' toirt a-steach clàr ainmichte "Luchd-obrach," anns a bheil fiosrachadh mu gach neach-obrach anns a 'bhuidhinn agad. Tha an clàr sin a 'cleachdadh àireamh ID àireamh-obrach sìor-fhillte mar phrìomh iuchair . Dh'fhaodadh tu feuchainn ris an aithris gu h-ìosal a chleachdadh gus neach-obrach ùr a chur a-steach don stòr-dàta agad:

INSERT INTO luchd-obrach (id, first_name, lastname, extension) VALUES (12497, 'Mike', 'Chapple', 4201)

Fo shuidheachaidhean àbhaisteach, bhiodh an aithris seo a 'cur sreath ris a' chlàr Luchd-obrach. Ge-tà, ma tha neach-obrach le ID 12497 ann mar-thà anns an stòr-dàta, cuiridh an sreath a-steach a 'bhriseadh prìomh shrian agus mar thoradh air a' mhearachd a leanas:

Msg 2627, Ìre 14, Stàite 1, Loidhne 1 A 'cur casg air bacadh PRÌOMH PRÌOMH' PK_employee_id '. Chan urrainn dhut iuchair dhùblach a chur a-steach ann an 'dbo.employees' an nì. Tha an aithris air a chrìochnachadh.

Ged a tha am mearachd seo a 'toirt dhut an fhiosrachadh a dh' fheumas tu gus duilgheadas a chuir air adhart, tha dà chùis ann. An toiseach, tha an teachdaireachd gu math duilich. Tha e a 'toirt a-steach còdan mearachd, àireamhan loidhne agus fiosrachadh eile nach gabh a thuigsinn don neach-cleachdaidh cuibheasach. An dara àite, agus nas cudromaiche, tha e ag adhbharachadh gun tèid an aithris a chuir às do dhroch bhriseadh agus gum faodadh e adhbhrachadh gu bheil tagradh ann.

Is e an roghainn an aithris a thionndadh ann an TRY ... Aithris CATCH, mar a chithear gu h-ìosal:

BEGIN TRY INSERT INTO employees (id, first_name, lastname, extension) VALUES (12497, 'Mike', 'Chapple', 4201) END TRY BEGIN PRINT PRÌOMH 'Mearachd:' + ERROR_MESSAGE (); EXEC msdb.dbo.sp_send_dbmail @profile_name = 'Post an Luchd-obrach', @recipients = 'hr@foo.com', @body = 'Thachair mearachd le bhith a' cruthachadh clàr luchd-obrach ùr. ', @subject =' Mearachd Duplication ID Luchd-obrach '; END CATCH

San eisimpleir seo, tha mearachdan sam bith a tha a 'tachairt air an aithris don neach-cleachdaidh a' toirt seachad an àithne agus an seòladh post-dealain hr@foo.com. Tha an mearachd a sheallas an neach-cleachdaidh gu h-ìosal

Mearachd: Cuingealachadh a thaobh briseadh PRÌOMH PRÌOMH 'PK_employee_id'. Chan urrainn dhut iuchair dhùblach a chur a-steach ann an 'dbo.employees' an nì. Mail air a dhol.

Nas cudromaiche buileach, mar as trice a 'cur an gnìomh tagradh a' dol mar as trice, a 'leigeil leis a' phrògramadair dèiligeadh ris an mhearachd gu grinn. Cleachdadh an TRY ... Is e dòigh eireachdail a th 'ann an aithris CATCH gus mearachdan a lorg ann an tagraidhean Stòr-dàta SQL a lorg agus a làimhseachadh.

Barrachd Ionnsachaidh

Ma tha thu airson barrachd ionnsachadh mu dheidhinn Ceist Structured Language, leugh Ro-ràdh gu SQL .