Обработка ошибок компонента Database Engine

Многие ошибки, вызываемые компонентом SQL Server Database Engine, могут быть перехвачены и исправлены программными средствами. Функции обработки ошибок реализованы в языке Transact-SQL и в интерфейсах прикладного программирования (API) для доступа к данным, которые используются приложениями для обращения к данным, хранимым в компоненте Database Engine.

Ошибки, вызываемые компонентом Database Engine, можно обрабатывать на двух уровнях.

  • Ошибки можно обрабатывать в компоненте Database Engine, вводя код обработки ошибок в пакеты Transact-SQL, хранимые процедуры, триггеры или в пользовательские функции. Механизмы обработки ошибок Transact-SQL включают в себя конструкцию TRY…CATCH (см. раздел TRY...CATCH (Transact-SQL)), инструкцию RAISERROR и функцию @@ERROR.
  • Ошибки могут возвращаться в вызывающее приложение и обрабатываться этим приложением. Каждый из API, используемых приложением для доступа к компоненту Database Engine, наделен механизмами для возвращения сведений об ошибках соответствующему приложению.
Подраздел Описание

Основные сведения об ошибках ядра СУБД

Каждая ошибка компонента Database Engine содержит следующие атрибуты: номер ошибки, строку сообщения, уровень серьезности, состояние, имя процедуры и номер строки.

Получение сведений об ошибках в языке Transact-SQL

Код Transact-SQL может извлекать сведения об ошибках с помощью функций ERROR_LINE, ERROR_MESSAGE, ERROR_NUMBER, ERROR_PROCEDURE, ERROR_SEVERITY, ERROR_STATE и @@ERROR.

Использование конструкции TRY...CATCH в языке Transact-SQL

В SQL Server 2005 реализована возможность обработки ошибок в коде Transact-SQL с помощью конструкции TRY…CATCH, аналогичной средствам обработки исключений в языках Microsoft Visual C++ и Visual C#. Когда ошибка обнаруживается в блоке TRY, элемент управления передается блоку CATCH, где она может быть обработана. Это основной механизм обработки ошибок в компоненте SQL Server 2005 Database Engine.

Использование инструкции RAISERROR

Вызывать пользовательские ошибки можно с помощью инструкции RAISERROR. Кроме того, ее можно использовать из блока CATCH для передачи приложению ошибок, обрабатываемых блоком CATCH.

Использование инструкции PRINT

Инструкцию PRINT можно использовать для возвращения приложению пользовательских сообщений.

Использование функции @@ERROR

В более ранних версиях SQL Server функция @@ERROR являлась основным средством выявления ошибок в инструкциях Transact-SQL. Конструкция TRY…CATCH расширяет набор функциональных возможностей.

Обработка ошибок и сообщений в приложениях

Все API доступа к данным, такие как ActiveX Data Objects (ADO), OLE DB и Open Database Connectivity (ODBC), оснащены механизмами извещения приложений обо всех сведениях об ошибках, полученных от компонента Database Engine.

Уровни серьезности ошибок ядра СУБД

Возникают сообщения об ошибках компонента Database Engine и о пользовательских ошибках с серьезностью от 1 до 25. Для формирования сообщений о пользовательских ошибках можно использовать sp_addmessage и RAISERROR.

См. также

Другие ресурсы

sys.messages (Transact-SQL)

Справка и поддержка

Получение помощи по SQL Server 2005