Rêberdana Step-by-Step-to-tedbîra TRY ... CATCH Ji bo Sazkirina SQL Server Erîtan

Çareserkirina nasnameyên bêyî bicîhkirin

TRY ... Danezana CATCH Di Transact- SQL de serîlêdanên di navnîşan de li ser şertên çewt çewt dike û dike. Ev daxuyaniyek bingehîn ya çewtiyê ya SQL Server destnîşankirin û beşek bernameyên daneyên danûstendinê yên girîng ên girîng e. TRY ... CATCH di sala 2008'an de dest pê dike SQL Server, Azure SQL Database, Azure SQL Data Warehouse û Data Warehouse ya Parallel.

BİXWÎNE TRY..CATCH

BİXWÎNE ... BİXWÎNE ji bo ku hûn ji bo danûstandinên danûstandinên danûstandinên danûstandinan dixebitin: yek ku hûn dixwazin "biceribînin" û yek ji bo ku bikar bînin ku ji bo çewtiyên ku "bikişînin" bigirin. Dema ku SQL Server diqewiminin TRY ... Daxuyaniya CATCH, ew yekser daxuyaniyek dike ku di navenda TRY de pêk tê. Ger daxuyaniyek TRY bi serkeftî derbas dike, SQL Server tenê diçe. Lêbelê, eger daxuyaniya TRY çewtiyek çêbibe, SQL Server daxuyaniyek CATCH derxistin ku ji kerema xwe re çewtiyek xelet bike.

Syntaxa bingehîn vê formê dike:

BEGIN TRY {sql_statement | statement_block} END TRY BEGIN BİXWÎNE [{sql_statement | statement_block}] END CATCH [; ]

TRY ... CATCH mînak

Ew e ku hûn bikar tînin ev daxuyaniyê bi rêya bikaranîna mînakek fêm bikin. Bifikirin ku hûn îdareya îdareya çavkaniyek çavkaniya mirovî ye ku navê tablo "Employees," heye ku agahdariya her karmendên di nav rêxistina we de. Ew tabloya nimûneya nasnameya karmendê wekî wekî keyeya bingehîn tê bikaranîn . Hûn dikarin hewl bidin ku daxuyaniya jêrîn bikar bînin ku karmendek nû ya navnîşana xwe de binivîse:

BERSÎVAN DEVELOPA (id, first_name, last_name, dirêjkirina dirêj) VALUES (12497, 'Mike', 'Chapple', 4201)

Di rewşên normal de, ev daxuyaniyek li ser maseya karkeran zêde bike. Lêbelê, heger karmendê ku bi 12497 bi nasnameya xwe ve hatibû damezirandin, heya navnîşa wê tengasiya sereke ya sereke binpê dike û encama paşnavê jêrîn:

Msg 2627, Level 14, Dewleta Dewlet 1, Zelal 1 1 Tundkirina Zagona KEY-BİXWÎNE ya 'PK_employee_id'. Dabeşkirina dubareyê li object 'dbo.employees' nabe. Gotar hate qedexekirin.

Dema ku ev xeletiyê bi we re agahdariyê dide ku hûn hewce ne ku pirsgirêka pirsgirêkê çareser bikin, her du pirsgirêkên wê re hene. Ya yekem, peyamek qirêj e. Ew di navnîşên çewtiyê de, hejmara hejmar û agahiyên din ên ku bikarhêner bikarhênerên navîn nayê zanîn ne. Ya duyemîn, û girîngtirîn, ew diyar dike ku daxuyaniyek bikişîne û dibe sedema pêlêdana têkçûnê.

Alternatîf e ku daxuyaniya di TRY de veşartî ... daxuyaniyek kişandin, wekî ku jêrîn nîşan dide:

BERSÎVE KARÎN BERSÎVE KARÎN BERSÎVÎ (KIR, first_name, last_name, dirêjkirin) VALUES (12497, 'Mike', 'Chapple', 4201) END BERSÎVEK BERSÎVEK BİXWÎNE 'Çewtiya:' + ERROR_MESSAGE (); EXEC msdb.dbo.sp_send_dbmail @profile_name = 'Employee Mail', @recipients = 'hr@foo.com', @body = 'Çewtiyek çêbûye çewtiyek karmendek karmendê nû çêkir.', @subject = 'Xeletiya Doktoriya Doktor ya Karker' '; END CATCH

Di vê nimûneyê de, ti çewtiyên ku têne dayîn têne agahdar kirin ku herdu bikarhêner bikarhêner e-nameya e-mail-e-mail@foo.com. Çewtiyek nîşanî ku bikarhêner ji jêr ve tê nîşandan:

Çewtiya: Binesaziya KCD ya KEYÎNE ya BİXWÎNE 'PK_employee_id'. Dabeşkirina dubareyê li object 'dbo.employees' nabe. Mail qeyd kirin.

Ya herî girîng, pêvajoya bicîhkirinê bi normally berdewam dike, ku bernameyek ku bi xeletiya xemgîniyê têgihîştin xistin. Bikaranîna TRY ... Daxuyaniya CATCH Daxuyaniya ku SQL Server Server di navnîşana çewtiyê de tête pêkanîn û peyda dike.

Zêdetir hîn bibin

Heke hûn dixwazin li ser Zimanek Stêrnekirî bêtir fêr bibin, binivîse destpêkê ya SQL .