Поделиться через


ERROR_STATE (Transact-SQL)

Область применения: SQL Server Управляемый экземпляр SQL Azure конечную точку аналитики платформы Аналитики Azure Synapse Analytics (PDW) в хранилище Microsoft Fabric в Microsoft Fabric

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

Соглашения о синтаксисе Transact-SQL

Синтаксис

ERROR_STATE ( )  

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

int

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

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

Возвращает значение NULL в случае вызова вне блока CATCH.

Замечания

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

При просмотре баз данных известных проблем, таких как База знаний Майкрософт, можно использовать номер состояния, чтобы определить, может ли записанная проблема совпадать с обнаруженной ошибкой. Например, если в статье базы знаний рассматривается сообщение об ошибке 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, вызывающая ошибку деления на ноль. Возвращается состояние ошибки.

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

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

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

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  

Примеры: Azure Synapse Analytics и система платформы аналитики (PDW)

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

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

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_MESSAGE() AS ErrorMessage;  
END CATCH;  
GO  

См. также

sys.messages (Transact-SQL)
ПОПЫТКА... 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)
Справочник по ошибкам и событиям (ядро СУБД)