Compartilhar via


ERROR_STATE (Transact-SQL)

Aplica-se a: SQL Server Instância Gerenciada de SQL do Azure Azure PDW (Sistema de Plataforma de Análise) do Azure Synapse Analytics Ponto de extremidade de análise de SQL no Microsoft Fabric Warehouse no Microsoft Fabric

Retorna o número de estado do erro que fez o bloco CATCH de um constructo TRY…CATCH ser executado.

Convenções de sintaxe de Transact-SQL

Sintaxe

ERROR_STATE ( )  

Observação

Para exibir a sintaxe do Transact-SQL para o SQL Server 2014 (12.x) e versões anteriores, confira a Documentação das versões anteriores.

Tipos de retorno

int

Valor retornado

Quando chamado em um bloco CATCH, retorna o número de estado de mensagem de erro que fez o bloco CATCH ser executado.

Retorna NULL se for chamado fora do escopo de um bloco CATCH.

Comentários

Algumas mensagens de erro podem ser geradas em vários pontos no código para o Microsoft SQL Server Mecanismo de Banco de Dados. Por exemplo, um erro "1105" pode ser gerado para várias condições diferentes. Cada condição específica que gera o erro atribui um código de estado exclusivo.

Ao exibir bancos de dados de problemas conhecidos, como a Base de Dados de Conhecimento Microsoft, é possível usar o número de estado para determinar se o problema registrado é o mesmo do erro que você encontrou. Por exemplo, se um Artigo da Base de Dados de Conhecimento descreve uma mensagem de erro 1105 com um estado 2, e a mensagem de erro 1105 que você recebeu tinha um estado 3, o erro provavelmente tem uma causa diferente daquela informada no artigo.

Um engenheiro de suporte do SQL Server também pode usar o código de estado de um erro para encontrar o local no código de origem em que aquele código de erro está sendo gerado, o que pode fornecer outras ideias sobre como diagnosticar o problema.

ERROR_STATE pode ser chamado em qualquer lugar dentro do escopo de um bloco CATCH.

ERROR_STATE retorna o estado de erro, independentemente do número de vezes que ele é executado ou se é executado dentro do escopo do bloco CATCH. É diferente de funções como @@ERROR, que retornam apenas o número de erro na instrução imediatamente posterior àquela que causa um erro, ou na primeira instrução de um bloco CATCH.

Em blocos CATCH aninhados, ERROR_STATE retorna o estado de erro específico do escopo do bloco CATCH no qual é referenciado. Por exemplo, o bloco CATCH de uma construção TRY...CATCH externa poderia ter uma construção TRY...CATCH aninhada. Dentro do bloco CATCH aninhado, ERROR_STATE retorna o estado do erro que invocou o bloco CATCH aninhado. Se ERROR_STATE for executado em um bloco CATCH externo, retornará o estado do erro que invocou aquele bloco CATCH.

Exemplos

a. Usando ERROR_STATE em um bloco CATCH

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

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

B. Usando ERROR_STATE em um bloco CATCH com outras ferramentas de tratamento de erros

O exemplo a seguir mostra uma instrução SELECT que gera um erro de divisão por zero. Junto com o estado de erro, são retornadas as informações relacionadas ao erro.

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 PDW (Analytics Platform System)

C. Usando ERROR_STATE em um bloco CATCH com outras ferramentas de tratamento de erros

O exemplo a seguir mostra uma instrução SELECT que gera um erro de divisão por zero. Junto com o estado de erro, são retornadas as informações relacionadas ao erro.

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  

Consulte Também

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)
Referência de erros e eventos (Mecanismo de Banco de Dados)