ERROR_STATE (Transact-SQL)

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

Значок ссылки на разделСинтаксические обозначения в Transact-SQL

Синтаксис

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 AdventureWorks2008R2;
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 AdventureWorks2008R2;
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