Крок за крокам кіраўніцтва toUsing TRY ... CATCH для апрацоўкі памылак SQL Server

Выяўленне памылак, не перарываючы выкананне

Заява 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 карэктна апрацаваць памылку.

Базавы сінтаксіс прымае такі выгляд:

ПАЧАЦЬ TRY {sql_statement | statement_block} END TRY CATCH ПАЧАЦЬ [{sql_statement | statement_block}] КАНЕЦ уловам [; ]

TRY ... CATCH Прыклад

Гэта лягчэй зразумець выкарыстанне гэтай заявы шляхам выкарыстання ў якасці прыкладу. Уявіце, што вы адміністратар базы дадзеных чалавечых рэсурсаў, якая ўтрымлівае табліцу з імем «Супрацоўнікі», якія змяшчаюць інфармацыю аб кожным з супрацоўнікаў у вашай арганізацыі. Гэтая табліца выкарыстоўвае цэлы лік супрацоўнікаў ідэнтыфікацыйны нумар у якасці першаснага ключа . Вы можаце паспрабаваць выкарыстоўваць аператар ніжэй для ўстаўкі новага супрацоўніка ў базу дадзеных:

INSERT INTO супрацоўнікаў (ID, first_name, last_name, пашырэнне) VALUES (12497, 'Mike', 'Chapple', 4201)

У нармальных умовах гэта зацвярджэнне будзе дадаць радок у табліцу Employees. Аднак, калі працаўнік з ID 12497 ужо існуе ў базе дадзеных, уставіўшы радок будзе парушаць абмежаванне першаснага ключа і прывесці да наступнай вярнуўся:

Msg 2627, узровень 14, стан 1, радок 1 Парушэнне абмежаванні PRIMARY KEY 'PK_employee_id. Немагчыма ўставіць паўтаральны ключ у аб'ект «dbo.employees». Заява была спынена.

У той час як гэтая памылка дае вам інфармацыю, неабходную для ліквідацыі праблемы, ёсць дзве праблемы, звязаныя з ім. Па-першае, паведамленне маскіровачную. Яна ўключае ў сябе коды памылак, нумары радкоў і іншую інфармацыю незразумелых для звычайнага карыстача. Па-другое, і што больш важна, гэта выклікае заява, каб перапыніць і можа прывесці да аварыі прыкладання.

У якасці альтэрнатывы можна абгарнуць заяву ў TRY ... CATCH заяву, як паказана ніжэй:

ПАЧАЦЬ TRY INSERT INTO супрацоўнікаў (ID, first_name, last_name, пашырэнне) VALUES (12497, 'Mike', 'Chapple', 4201) END TRY CATCH ПАЧАЦЬ PRINT 'Памылка:' + ERROR_MESSAGE (); EXEC msdb.dbo.sp_send_dbmail @profile_name = 'Супрацоўнік пошты', @recipients = 'hr@foo.com', @body = 'Адбылася памылка пры стварэнні новай запісу супрацоўніка.', @subject = 'Employee ID Дубляванне памылка'; END CATCH

У гэтым прыкладзе, любыя памылкі, якія ўзнікаюць, як паведамляюцца, як карыстальніку, які выконвае каманду і адрас электроннай пошты hr@foo.com. Памылка паказваецца карыстачу прыводзіцца ніжэй:

Памылка: Парушэнне абмежаванні PRIMARY KEY 'PK_employee_id. Немагчыма ўставіць паўтаральны ключ у аб'ект «dbo.employees». Пошта у чарзе.

Самае галоўнае, што выкананне прыкладання працягваецца ў звычайным рэжыме, што дазваляе праграмісту карэктна апрацоўваць памылкі. Выкарыстанне заявы TRY ... CATCH гэта элегантны спосаб загадзя выяўляць і апрацоўваць памылкі, якія ўзнікаюць у дадатках баз дадзеных SQL Server.

навучанне Больш падрабязна

Калі вы хочаце даведацца больш аб Structured Query Language, прачытайце Уводзіны ў SQL .