Ръководство стъпка по стъпка toUsing TRY ... Улов за обработка на SQL Server грешки

Идентифициране на грешки без прекъсване на изпълнението

Извлечението TRY ... CATCH в Transact- SQL установява и обработва условия за грешки в приложенията ви за бази данни. Това твърдение е крайъгълният камък на обработката на SQL Server грешки и е важна част от разработването на надеждни приложения за бази данни. TRY ... CATCH се прилага за SQL Server, започващ през 2008 г., Azure SQL Database, Azure SQL Data Warehouse и паралелен склад за данни.

Представяне на TRY..CATCH

TRY ... CATCH работи, като ви позволява да зададете два Transact-SQL израза: този, който искате да "опитате", а друг - да "улови" грешките, които могат да възникнат. Когато SQL Server срещне инструкция TRY ... CATCH, той незабавно изпълнява изявлението, включено в клаузата TRY. Ако операторът TRY се изпълни успешно, SQL Server просто се придвижва. Ако обаче изявлението TRY генерира грешка, SQL Server изпълнява операцията CATCH, за да обработва грациозно грешката.

Основният синтаксис има тази форма:

ЗАПОЧНЕТЕ ОПИТАЙ {sql_statement | statement_block} END TRY НАЧАЛО УЛОВ [{sql_statement | statement_block}] END CATCH [; ]

TRY ... Пример за улов

Най-лесно е да разберете използването на това изявление чрез използването на пример. Представете си, че сте администратор на база данни с човешки ресурси, която съдържа таблица "Служители", съдържаща информация за всеки от служителите във вашата организация. В тази таблица се използва идентификационен номер на служител с цялото число като първичен ключ . Може да опитате да използвате изявлението по-долу, за да вмъкнете нов служител във вашата база данни:

ВЪВЕЖДАНЕ В СЛУЖИТЕЛИТЕ (id, first_name, last_name, extension) VALUES (12497, "Mike", "Chapple", 4201)

При нормални обстоятелства това изявление би добавило ред към таблицата "Служители". Ако обаче служител с ID 12497 вече съществува в базата данни, вмъкването на реда би нарушило ограничението на основния ключ и доведе до следната грешка:

Msg 2627, Level 14, State 1, Line 1 Нарушение на ограничението PRIMARY KEY "PK_employee_id". Не може да се вмъкне дублиращ се ключ в обект 'dbo.employees'. Изявлението е прекратено.

Въпреки че тази грешка ви предоставя информацията, необходима за отстраняване на проблема, има два проблема с нея. Първо, съобщението е загадъчно. Той включва кодовете за грешки, номерата на редовете и друга информация, която не е разбираема за средния потребител. Второ, и по-важното, това кара декларацията да прекъсне и да причини катастрофа на приложението.

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

Започнете да опитате да въведете служители (id, first_name, last_name, extension) VALUES (12497, "Mike", "Chapple", 4201) END TRY BEGIN ПРИНЦИП НА ПРИНЦИПА "Грешка: + ERROR_MESSAGE (); EXEC msdb.dbo.sp_send_dbmail @profile_name = 'Mail на служител', @recipients = 'hr@foo.com', @body = 'Възникна грешка при създаването на нов запис на служител.', @subject = 'Грешка при дублиране на служител'; КРАЙ НА УЛОВ

В този пример всички грешки, които се появяват, се съобщават както на потребителя, изпълняващ командата, така и на имейл адреса на hr@foo.com. Грешката, показана на потребителя, се показва по-долу:

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

Най-важното е, че изпълнението на приложенията продължава нормално, което позволява на програмиста да обработва грациозно грешката. Използването на инструмента TRY ... CATCH е елегантен начин за проактивно откриване и обработка на грешки, които се появяват в приложения на SQL Server Database.

Научете повече

Ако искате да научите повече за езика за структурирани заявки, прочетете Въведение в SQL .