Пошаговое руководство по использованию TRY… CATCH для обработки ошибок SQL Server

Выявить ошибки, не прерывая выполнение

Оператор TRY… CATCH в Transact-SQL обнаруживает и обрабатывает ошибки в приложениях базы данных. Это утверждение является краеугольным камнем обработки ошибок SQL Server и является важной частью разработки надежных приложений баз данных. TRY … CATCH применяется к SQL Server, начиная с 2008 года, базе данных SQL Azure, хранилищу данных SQL Azure и хранилищу параллельных данных.

Представляем TRY … CATCH

TRY … CATCH позволяет указать две инструкции Transact-SQL: одну, которую вы хотите “попробовать”, а другую, чтобы “перехватить” любые ошибки, которые могут возникнуть. Когда SQL Server встречает оператор TRY … CATCH, он немедленно выполняет оператор, включенный в предложение TRY. Если инструкция TRY выполняется успешно, SQL Server продолжает работу. Однако если инструкция TRY генерирует ошибку, SQL Server выполняет инструкцию CATCH, чтобы корректно обработать ошибку.

Основной синтаксис принимает эту форму:

 НАЧАТЬ ИСПЫТАТЬ 
sql_statement
END TRY
НАЧАЛО ЗАПИСИ
[ Statement_block]
END CATCH
[; ]

Пример TRY … CATCH

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

 INSERT INTO сотрудников (идентификатор, имя, фамилия, расширение) 
VALUES (12497, «Майк», «Chapple», 4201)

В обычных условиях этот оператор добавляет строку в таблицу «Сотрудники». Однако, если сотрудник с идентификатором 12497 уже существует в базе данных, вставка строки нарушит ограничение первичного ключа и приведет к следующей ошибке:

 Сообщение 2627, уровень 14, состояние 1, строка 1 
Нарушение ограничения PRIMARY KEY 'PK_employee_id'. Невозможно вставить повторяющийся ключ в объект "dbo.employees".
Оператор завершен.

Хотя эта ошибка предоставляет вам информацию, необходимую для устранения проблемы, с ней связаны две проблемы. Во-первых, сообщение загадочное. Он включает коды ошибок, номера строк и другую информацию, которая непонятна среднему пользователю. Во-вторых, и что более важно, это приводит к прерыванию оператора и может вызвать сбой приложения.
Альтернативой является завершение оператора в оператор TRY… CATCH, как показано здесь:

 НАЧАТЬ ИСПЫТАТЬ 
ВСТАВИТЬ В сотрудников (идентификатор, имя, фамилия, добавочный номер)
ЦЕННОСТИ (12497, «Майк», «Чаппель», 4201)
НАКОНЕЦ НАЧАТЬ
НАЧАТЬ CATCH
ПЕЧАТЬ 'ОШИБКА:' + ERROR_MESSAGE ();
EXEC msdb.dbo.sp_send_dbmail
@profile_name = 'Почта сотрудника',
@recipients ='hr@foo.com ',
@body =' Произошла ошибка при создании новой записи сотрудника. ',
@subject =' Ошибка дублирования идентификатора сотрудника ';
END CATCH

В этом примере обо всех возникающих ошибках сообщается как пользователю, выполняющему команду, так и адресу электронной почты hr@foo.com. Ошибка, отображаемая пользователю:

 Ошибка: нарушение ограничения PRIMARY KEY 'PK_employee_id'. 
Невозможно вставить дубликат ключа в объект «dbo.employees».
Почта в очереди.

Выполнение приложения продолжается в обычном режиме, что позволяет программисту обработать ошибку. Использование оператора TRY … CATCH – это элегантный способ упреждающего обнаружения и обработки ошибок, возникающих в приложениях базы данных SQL Server.

Учиться больше

Если вы хотите узнать больше о языке структурированных запросов, ознакомьтесь с разделом Введение в SQL.

Оцените статью
Solutics.ru
Добавить комментарий