ERROR_STATE (Transact-SQL)

Область применения:SQL Server Управляемый экземпляр SQL Azure Azure Synapse Analytics Analytics Platform System (PDW)SQL AnalyticsEndpoints в хранилище Microsoft Fabricв Microsoft Fabric

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

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

Синтаксис

ERROR_STATE ( )  

Примечание.

Сведения о синтаксисе Transact-SQL для SQL Server 2014 (12.x) и более ранних версиях см . в документации по предыдущим версиям.

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

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_NUМБ ER (Transact-SQL)
ERROR_PROCEDURE (Transact-SQL)
ERROR_SEVERITY (Transact-SQL)
RAISERROR (Transact-SQL)
@@ERROR (Transact-SQL)
Справочник по ошибкам и событиям (ядро СУБД)