Чекор-по-чекор водич за користење на TRY ... CATCH да се справи со SQL Server грешки

Идентификувајте ги грешките без да го прекинувате извршувањето

Извештајот TRY ... CATCH во Transact- SQL ги открива и обработува условите за грешка во апликациите за базата на податоци. Оваа изјава е камен-темелник на SQL Server грешката и е важен дел од развојот на робустен апликација за бази на податоци. TRY ... CATCH се однесува на SQL Server, почнувајќи од 2008 година, Azure SQL база на податоци, Azure SQL складиште на податоци и паралелно складиште на податоци.

Воведување 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 TRY НАЧИНА НА ВЛЕЗОТ [{sql_statement | statement_block}] END CATCH [; ]

ИСПИТУВАЊЕ ... CATCH Пример

Најлесно е да се разбере употребата на оваа изјава преку употреба на пример. Замислете дека сте администратор на база на човечки ресурси која содржи табела наречена "Вработени", која содржи информации за секој од вработените во вашата организација. Таа табела користи примарен клуч за број на вработен. Може да се обидете да ја користите изјавата подолу за да внесете нов вработен во вашата база на податоци:

INSERT INTO employees (id, first_name, last_name, extension) ВРЕДНОСТИ (12497, 'Мајк', 'Chapple', 4201)

Под нормални околности, оваа изјава ќе додаде ред на табелата "Вработени". Меѓутоа, ако работникот со ID 12497 веќе постои во базата на податоци, вметнувањето на редот би го прекршило ограничувањето на основниот клуч и ќе резултира со следнава грешка:

Msg 2627, Ниво 14, Член 1, Линија 1 Прекршување на PRIMARY KEY ограничување 'PK_employee_id'. Не може да внесе дупликат клуч во објектот 'dbo.employees'. Изјавата е прекината.

Додека оваа грешка ви ги обезбедува информациите што ви се потребни за да го смените проблемот, постојат две проблеми со неа. Прво, пораката е криптична. Тука спаѓаат кодови за грешки, броеви на линии и други информации што не се разбираат за просечниот корисник. Второ, и уште поважно, тоа предизвикува изјавата да прекине и може да предизвика паѓање на апликацијата.

Алтернативата е да ја заврши изјавата во изјава TRY ... CATCH, како што е прикажано подолу:

BEGIN TRY INSERT INTO на вработените (id, first_name, last_name, extension) ВРЕДНОСТИ (12497, 'Mike', 'Chapple', 4201) END TRY BEGIN PRINT 'Error:' + ERROR_MESSAGE (); EXEC msdb.dbo.sp_send_dbmail @profile_name = 'Пошта на вработените', @recipients = 'hr@foo.com', @body = 'Се појави грешка при креирањето на нов рекорд на вработените.', @subject = 'Грешка при умножување на вработените на вработените'; END CATCH

Во овој пример, сите грешки што се случуваат се пријавуваат и на корисникот кој ја извршува командата и на адресата e-mail hr@foo.com. Погрешната прикажана на корисникот се појавува подолу:

Грешка: Прекршување на PRIMARY KEY ограничување 'PK_employee_id'. Не може да внесе дупликат клуч во објектот 'dbo.employees'. Поштата чека во ред.

Што е најважно, извршувањето на апликацијата продолжува нормално, овозможувајќи им на програмерот благодатно да се справи со грешката. Употреба на TRY ... изјавата CATCH е елегантен начин за проактивно откривање и обработка на грешки кои се појавуваат во апликациите на SQL Server база на податоци.

Учење повеќе

Ако сакате да дознаете повеќе за структурираниот јазик за пребарување, прочитајте Вовед во SQL .