ERROR_STATE (Transact-SQL)

Aplica-se a:yesSQL Server (todas as versões compatíveis) YesInstância Gerenciada de SQL do Azure yesAzure Synapse Analytics yesAnalytics Platform System (PDW)

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

Topic link iconConvenções de sintaxe do Transact-SQL

Sintaxe

ERROR_STATE ( )  

Observação

Para ver a sintaxe do Transact-SQL para o SQL Server 2014 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)