Skip to main content

Использование TRY ... CATCH для устранения ошибок SQL Server

VICTORIA 4.47 - ИНСТРУКЦИЯ по ПРОВЕРКЕ ДИСКА И ИСПРАВЛЕНИЮ БИТЫХ СЕКТОРОВ (Апрель 2025)

VICTORIA 4.47 - ИНСТРУКЦИЯ по ПРОВЕРКЕ ДИСКА И ИСПРАВЛЕНИЮ БИТЫХ СЕКТОРОВ (Апрель 2025)
Anonim

Инструкция 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 для корректной обработки ошибки.

Основной синтаксис имеет следующий вид:

НАЧАТЬ ПОПРОБУЙТЕ блок оператора END TRYНАЧИНАЙТЕСЬsql_statementEND CATCH ;

Пример TRY … CATCH

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

INSERT INTO сотрудников (id, first_name, last_name, extension)ЦЕННОСТИ (12497, «Майк», «Чапл», 4201)

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

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

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

НАЧАТЬ ПОПРОБУЙТЕINSERT INTO сотрудников (id, first_name, last_name, extension)ЦЕННОСТИ (12497, «Майк», «Чапл», 4201)END TRYНАЧИНАЙТЕСЬPRINT 'ERROR:' + ERROR_MESSAGE ();EXEC msdb.dbo.sp_send_dbmail@profile_name = «Почта сотрудника»,@recipients = '[email protected]',@body = 'Произошла ошибка при создании новой записи сотрудника.',@subject = 'Ошибка дублирования идентификатора сотрудника';END CATCH

В этом примере любые возникающие ошибки сообщаются как пользователю, выполняющему команду, так и адресу электронной почты [email protected]. Ошибка, отображаемая пользователю:

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

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

Узнать больше

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