ERROR_STATE (Transact-SQL)

Aplica-se a:SQL ServerAzureSQL Managed InstanceAzureSynapse AnalyticsAnalyticsPlatform System (PDW)SQL analytics endpoint in Microsoft FabricWarehousein Microsoft Fabric

Devolve o número de estado do erro que causou o bloco CATCH de um TRY... Construção CATCH a ser executada.

Transact-SQL convenções de sintaxe

Syntax

ERROR_STATE ( )  

Tipos de devolução

int

Valor de retorno

Quando chamado num bloco CATCH, devolve o número de estado da mensagem de erro que causou a execução do bloco CATCH.

Devolve NULL se for chamado fora do âmbito de um bloco CATCH.

Observações

Algumas mensagens de erro podem ser geradas em vários pontos do código do Microsoft SQL Server Database Engine. Por exemplo, um erro "1105" pode ser criado para várias condições diferentes. Cada condição específica que gera o erro atribui um código de estado único.

Ao consultar bases de dados de problemas conhecidos, como a Base de Dados de Conhecimento Microsoft, pode usar o número de estado para determinar se o problema registado pode ser o mesmo que o erro que encontrou. Por exemplo, se um artigo da Knowledge Base discute uma mensagem de erro 1105 com um estado 2, e a mensagem de erro 1105 que recebeu tinha um estado 3, o seu erro provavelmente teve uma causa diferente da reportada no artigo.

Um engenheiro de suporte SQL Server pode também usar o código de estado de um erro para encontrar a localização no código-fonte onde esse erro está a ser gerado, o que pode fornecer ideias adicionais sobre como diagnosticar o problema.

ERROR_STATE pode ser chamada em qualquer lugar dentro do âmbito de um bloco CATCH.

ERROR_STATE devolve o estado de erro independentemente de quantas vezes é executado, ou onde é executado dentro do âmbito do bloco CATCH. Isto contrasta com funções como @@ERROR, que só devolve o número de erro na instrução imediatamente após a que causa o erro, ou na primeira instrução de um bloco CATCH.

Nos blocos CATCH aninhados, ERROR_STATE devolve o estado de erro específico do âmbito do bloco CATCH em que está referenciado. Por exemplo, o bloco CATCH de um TRY exterior... A construção CATCH poderia ter um TRY aninhado... Construção CATCH. Dentro do bloco CATCH aninhado, ERROR_STATE devolve o estado do erro que invocou o bloco CATCH aninhado. Se ERROR_STATE for executado no bloco CATCH externo, devolve o estado do erro que invocou esse bloco CATCH.

Examples

A. Usar ERROR_STATE num bloco CATCH

O exemplo a seguir mostra uma SELECT instrução que gera um erro de divisão por zero. O estado do erro é devolvido.

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

B. Usar ERROR_STATE num bloco CATCH com outras ferramentas de gestão de erros

O exemplo a seguir mostra uma SELECT instrução que gera um erro de divisão por zero. Juntamente com o estado do erro, a informação relacionada com o erro é devolvida.

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  

Exemplos: Azure Synapse Analytics e Analytics Platform System (PDW)

C. Usar ERROR_STATE num bloco CATCH com outras ferramentas de gestão de erros

O exemplo a seguir mostra uma SELECT instrução que gera um erro de divisão por zero. Juntamente com o estado do erro, a informação relacionada com o erro é devolvida.

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