ERROR_STATE (Transact-SQL)

Возвращает номер состояния для ошибки, вызвавшей запуск блока CATCH в конструкции TRY…CATCH.

Синтаксис

ERROR_STATE()

Тип возвращаемых данных

int

Возвращаемое значение

При вызове в блоке CATCH возвращает номер состояния сообщения об ошибке, вызвавшей запуск блока CATCH.

Возвращает значение NULL, если вызов произошел вне области видимости блока CATCH.

Замечания

Некоторые сообщения об ошибках могут возникать в различных местах кода для компонента Microsoft SQL Server Database Engine. Например, в нескольких различных ситуациях может возникнуть ошибка «1105». Каждому определенному условию, вызывающему ошибку, назначен уникальный код состояния.

При просмотре баз данных известных проблем, например базы знаний Microsoft, можно по номеру состояния выяснить, соответствует ли запись о проблеме той ошибке, которая возникла. Например, если в статье базы знаний рассматривается сообщение об ошибке 1105 с состоянием 2, а полученное вами сообщение об ошибке 1105 имеет состояние 3, то в этом случае ошибка произошла по иной причине, чем ошибка, описанная в статье.

Кроме того, сотрудник службы поддержки SQL Server может использовать код состояния ошибки для поиска в исходном коде места, где произошла ошибка, это поможет ему в диагностировании неполадки.

Функцию ERROR_STATE можно вызывать в любом месте области видимости блока CATCH.

Функция ERROR_STATE возвращает состояние ошибки вне зависимости от числа ее запусков или места запуска в области видимости блока CATCH. Это отличается от поведения таких функций, как @@ERROR, которые возвращают номер ошибки в инструкции лишь сразу после ее возникновения или в первой инструкции блока CATCH.

Во вложенных блоках CATCH функция ERROR_STATE возвращает состояние ошибки, относящееся к области видимости блока CATCH, в которой она вызвана. Например, блок CATCH внешней конструкции TRY...CATCH мог содержать вложенную конструкцию TRY...CATCH. Во вложенном блоке CATCH функция ERROR_STATE возвращает состояние ошибки, вызвавшей вложенный блок CATCH. Если функция ERROR_STATE запускается во внешнем блоке CATCH, то она возвращает состояние ошибки, вызвавшей внешний блок CATCH.

Примеры

А. Использование функции ERROR_STATE в блоке CATCH

Этот пример демонстрирует инструкцию SELECT, которая вызывает ошибку деления на ноль. Возвращается состояние ошибки.

USE AdventureWorks;
GO

BEGIN TRY
    -- Generate a divide by zero error
    SELECT 1/0;
END TRY
BEGIN CATCH
    SELECT ERROR_STATE() AS ErrorState;
END CATCH;
GO

Б. Использование функции ERROR_STATE в блоке CATCH вместе с другими средствами обработки ошибок

Этот пример демонстрирует инструкцию SELECT, которая вызывает ошибку деления на ноль. Вместе с состоянием ошибки возвращаются сведения, относящиеся к этой ошибке.

USE AdventureWorks;
GO

BEGIN TRY
    -- Generate a divide-by-zero error.
    SELECT 1/0;
END TRY
BEGIN CATCH
    SELECT
        ERROR_NUMBER() AS ErrorNumber,
        ERROR_SEVERITY() AS ErrorSeverity,
        ERROR_STATE() AS ErrorState,
        ERROR_PROCEDURE() AS ErrorProcedure,
        ERROR_LINE() AS ErrorLine,
        ERROR_MESSAGE() AS ErrorMessage;
END CATCH;
GO

См. также

Справочник

sys.messages (Transact-SQL)
TRY...CATCH (Transact-SQL)
ERROR_LINE (Transact-SQL)
ERROR_MESSAGE (Transact-SQL)
ERROR_NUMBER (Transact-SQL)
ERROR_PROCEDURE (Transact-SQL)
ERROR_SEVERITY (Transact-SQL)
RAISERROR (Transact-SQL)
@@ERROR (Transact-SQL)

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

Получение сведений об ошибках в языке Transact-SQL
Использование конструкции TRY...CATCH в языке Transact-SQL
Использование инструкции RAISERROR
Использование функции @@ERROR
Уровни серьезности ошибок ядра СУБД

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

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