Մի քայլ առ քայլ ուղեցույց դեպի TRY ... CATCH- ը կարգավորել SQL Server- ի սխալները

Պարզեք սխալները `առանց ընդհատելու կատարումը

The TRY ... CATCH- ի հայտարարությունը Transact- SQL- ում հայտնաբերում եւ կարգավորում է ձեր բազայի ծրագրերի սխալների պայմանները: Այս հայտարարությունը հանդիսանում է SQL Server- ի սխալի բեռնաթափման հիմնարար եւ հանդիսանում է ամուր տվյալների բազայի ծրագրերի մշակման կարեւոր բաղադրիչ: TRY ... CATCH- ն կիրառվում է SQL Server- ից 2008 թվականից, Azure SQL Database- ի, Azure SQL Data Warehouse- ի եւ Parallel Data Warehouse- ի:

Ներկայացնելով TRY..CATCH- ը

TRY ... CATCH- ը աշխատում է `թույլ տալով ընդգրկել երկու Transact-SQL հայտարարությունները` մեկը, որը ցանկանում եք «փորձել» եւ մյուսը օգտագործել «բռնել» ցանկացած սխալների, որոնք կարող են առաջանալ: Երբ SQL Server- ը հանդիպում է TRY ... CATCH- ի հայտարարության մեջ, այն անմիջապես կատարում է TRY- ի դրույթում ընդգրկված հայտարարությունը: Եթե ​​TRY- ի հայտարարությունը հաջողությամբ կատարում է, SQL Server- ը պարզապես շարժվում է: Սակայն, եթե TRY- ի հայտարարությունը առաջացնում է սխալ, SQL Server- ը կատարում է CATCH- ի հայտարարությունը նրբանկատորեն կարգավորել սխալը:

Հիմնական տեքստը տանում է այս ձեւը.

BEGIN TRY {sql_statement | statement_block} END ԹՈՂԱՑՆԵԼ ՍԿՍԵԼ [{sql_statement | statement_block}] END CATCH [; []

TRY ... CATCH Օրինակ

Դժվար է հասկանալ այս հայտարարության օգտագործումը `օրինակ օգտագործելով: Պատկերացրեք, որ դուք «Մարդկային ռեսուրսների տվյալների բազայի» կառավարիչ եք, որը պարունակում է «Աշխատակիցներ» աղյուսակը, որը պարունակում է տեղեկություններ ձեր կազմակերպության աշխատակիցների մասին: Այդ աղյուսակը օգտագործում է ամբողջ թվով աշխատողի ID համարը որպես առաջնային բանալին : Կարող եք փորձել ստորեւ բերված հայտարարությունը օգտագործել ձեր տվյալների բազայում նոր աշխատակից ներգրավելու համար.

INSERT INTO- ի աշխատակիցները (id, first_name, last_name, extension) VALUES (12497, 'Մայք', 'Chapple', 4201)

Նորմալ հանգամանքներում, այս հայտարարությունը կարող է ավելացնել աշխատակիցների աղյուսակը: Այնուամենայնիվ, եթե տվյալների բազայում արդեն գոյություն ունեն ID 12497 աշխատող, տողը տեղադրելու համար խախտում է առաջնային հիմնական խոչընդոտը եւ հանգեցնում է հետեւյալ սխալին.

Msg 2627, Level 14, State 1, Line 1 PRIMARY KEY- ի սահմանափակումների խախտում 'PK_employee_id': Հնարավոր չէ կրկնօրինակ բանալ այն «dbo.employees» - ում: Հայտարարությունը դադարեցվել է:

Թեեւ այս սխալը ձեզ տալիս է այն խնդիրը, որն անհրաժեշտ է խնդրի լուծման համար, կան երկու խնդիր: Նախ, հաղորդագրությունը գաղտնի է: Այն ներառում է սխալի կոդեր, գծերի համարներ եւ միջին օգտագործողի համար անհասկանալի այլ տեղեկություններ: Երկրորդը, եւ ավելի կարեւոր է, այն ստիպում է հայտարարությունը չեղյալ հայտարարել եւ կարող է առաջացնել հայտի վթարի:

Այլընտրանքն այն է, որ հայտարարությունը կպցնելով TRY- ում ... CATCH- ի հայտարարությունը, ինչպես ցույց է տրված ստորեւ:

BEGIN TRY- ը ներկառուցված աշխատակիցներին (id, first_name, last_name, ընդլայնում) VALUES (12497, 'Mike', 'Chapple', 4201) END ԵՂԵԼ ԵՔ ԿԱՏՉԱԿԱՆ ՊՐԻՆՏ 'Սխալ `' + ERROR_MESSAGE (); EXEC msdb.dbo.sp_send_dbmail @profile_name = 'Employee Mail', @recipients = 'hr@foo.com', @body = 'Անհաջողություն է տեղի ունեցել նոր աշխատակիցների ստեղծման համար:', @subject = 'Employee ID Replication Error'; END CATCH- ը

Այս օրինակում, որ տեղի է ունենում ցանկացած սխալ, հաղորդում է հրամանը կատարող օգտագործողը եւ hr@foo.com էլ.փոստի հասցեն: Ստորեւ ներկայացվում է օգտվողին ցուցադրվող սխալը.

Սխալ. PRIMARY KEY- ի սահմանափակումների խախտում 'PK_employee_id': Հնարավոր չէ կրկնօրինակ բանալ այն «dbo.employees» - ում: Փոստը հերթ էր տվել:

Ամենակարեւորը, կիրառման կատարումը շարունակվում է նորմալ, թույլ տալով, որ ծրագրավորողը նրբանկատորեն կկիրառի սխալը: Օգտագործեք TRY- ից ... CATCH հայտարարությունը այն էլեգանտ ձեւն է, որն առաջացնում է կանխարգելում եւ կարգավորում SQL Server տվյալների բազայի ծրագրերում կատարվող սխալները:

Ուսուցման ավելին

Եթե ​​ցանկանում եք ավելին իմանալ Structured Query Language- ի մասին, կարդացեք Introduction to SQL- ը :