Обработка ошибок компонента 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 может извлекать сведения об ошибках с помощью функций ERROR_LINE, ERROR_MESSAGE, ERROR_NUMBER, ERROR_PROCEDURE, ERROR_SEVERITY, ERROR_STATE и @@ERROR. |
|
В SQL Server 2005 реализована возможность обработки ошибок в коде Transact-SQL с помощью конструкции TRY…CATCH, аналогичной средствам обработки исключений в языках Microsoft Visual C++ и Visual C#. Когда ошибка обнаруживается в блоке TRY, элемент управления передается блоку CATCH, где она может быть обработана. Это основной механизм обработки ошибок в компоненте SQL Server 2005 Database Engine. |
|
Вызывать пользовательские ошибки можно с помощью инструкции RAISERROR. Кроме того, ее можно использовать из блока CATCH для передачи приложению ошибок, обрабатываемых блоком CATCH. |
|
Инструкцию PRINT можно использовать для возвращения приложению пользовательских сообщений. |
|
В более ранних версиях 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. |