ERROR_STATE (Transact-SQL)ERROR_STATE (Transact-SQL)

APLICA-SE A: simSQL Server nãoBanco de Dados SQL do Azure simSQL Data Warehouse do Azure simParallel Data Warehouse APPLIES TO: yesSQL Server noAzure SQL Database yesAzure SQL Data Warehouse yesParallel Data Warehouse

Retorna o número de estado do erro que fez o bloco CATCH de um constructo TRY…CATCH ser executado.Returns the state number of the error that caused the CATCH block of a TRY...CATCH construct to be run.

Ícone de link do tópico Convenções de sintaxe de Transact-SQLTopic link icon Transact-SQL Syntax Conventions

SintaxeSyntax

ERROR_STATE ( )  

Tipos de retornoReturn Types

intint

Valor retornadoReturn Value

Quando chamado em um bloco CATCH, retorna o número de estado de mensagem de erro que fez o bloco CATCH ser executado.When called in a CATCH block, returns the state number of the error message that caused the CATCH block to be run.

Retorna NULL se for chamado fora do escopo de um bloco CATCH.Returns NULL if called outside the scope of a CATCH block.

RemarksRemarks

Algumas mensagens de erro podem ser geradas em vários pontos no código para o MicrosoftMicrosoft SQL ServerSQL Server Mecanismo de Banco de DadosDatabase Engine.Some error messages can be raised at multiple points in the code for the MicrosoftMicrosoft SQL ServerSQL Server Mecanismo de Banco de DadosDatabase Engine. Por exemplo, um erro "1105" pode ser gerado para várias condições diferentes.For example, an "1105" error can be raised for several different conditions. Cada condição específica que gera o erro atribui um código de estado exclusivo.Each specific condition that raises the error assigns a unique state code.

Ao exibir bancos de dados de problemas conhecidos, como a Base de Dados de Conhecimento MicrosoftMicrosoft, é possível usar o número de estado para determinar se o problema registrado é o mesmo do erro que você encontrou.When viewing databases of known issues, such as the MicrosoftMicrosoft Knowledge Base, you can use the state number to determine if the recorded issue might be the same as the error you have encountered. 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.For example, if a Knowledge Base article discusses an 1105 error message with a state of 2, and the 1105 error message you received had a state of 3, your error probably had a different cause than the one reported in the article.

Um engenheiro de suporte do SQL ServerSQL 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.A SQL ServerSQL Server support engineer can also use the state code from an error to find the location in the source code where that error is being raised, which may provide additional ideas on how to diagnose the problem.

ERROR_STATE pode ser chamado em qualquer lugar dentro do escopo de um bloco CATCH.ERROR_STATE may be called anywhere within the scope of a CATCH block.

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.ERROR_STATE returns the error state regardless of how many times it is run, or where it is run within the scope of the CATCH block. Isso é 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.This is in contrast to functions like @@ERROR, which only returns the error number in the statement immediately after the one that causes an error, or in the first statement of a CATCH block.

Em blocos CATCH aninhados, ERROR_STATE retorna o estado de erro específico do escopo do bloco CATCH no qual é referenciado.In nested CATCH blocks, ERROR_STATE returns the error state specific to the scope of the CATCH block in which it is referenced. Por exemplo, o bloco CATCH de uma construção TRY...CATCH externa poderia ter uma construção TRY...CATCH aninhada.For example, the CATCH block of an outer TRY...CATCH construct could have a nested TRY...CATCH construct. Dentro do bloco CATCH aninhado, ERROR_STATE retorna o estado do erro que invocou o bloco CATCH aninhado.Within the nested CATCH block, ERROR_STATE returns the state from the error that invoked the nested CATCH block. Se ERROR_STATE for executado em um bloco CATCH externo, retornará o estado do erro que invocou aquele bloco CATCH.If ERROR_STATE is run in the outer CATCH block, it returns the state from the error that invoked that CATCH block.

ExemplosExamples

A.A. Usando ERROR_STATE em um bloco CATCHUsing ERROR_STATE in a CATCH block

O exemplo a seguir mostra uma instrução SELECT que gera um erro de divisão por zero.The following example shows a SELECT statement that generates a divide-by-zero error. O estado do erro é retornado.The state of the error is returned.

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

B.B. Usando ERROR_STATE em um bloco CATCH com outras ferramentas de tratamento de errosUsing ERROR_STATE in a CATCH block with other error-handling tools

O exemplo a seguir mostra uma instrução SELECT que gera um erro de divisão por zero.The following example shows a SELECT statement that generates a divide-by-zero error. Junto com o estado de erro, são retornadas as informações relacionadas ao erro.Along with the error state, information that relates to the error is returned.

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 SQL Data WarehouseAzure SQL Data Warehouse e Parallel Data WarehouseParallel Data WarehouseExamples: Azure SQL Data WarehouseAzure SQL Data Warehouse and Parallel Data WarehouseParallel Data Warehouse

C.C. Usando ERROR_STATE em um bloco CATCH com outras ferramentas de tratamento de errosUsing ERROR_STATE in a CATCH block with other error-handling tools

O exemplo a seguir mostra uma instrução SELECT que gera um erro de divisão por zero.The following example shows a SELECT statement that generates a divide-by-zero error. Junto com o estado de erro, são retornadas as informações relacionadas ao erro.Along with the error state, information that relates to the error is returned.

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émSee Also

sys.messages (Transact-SQL) sys.messages (Transact-SQL)
TRY...CATCH (Transact-SQL) TRY...CATCH (Transact-SQL)
ERROR_LINE (Transact-SQL) ERROR_LINE (Transact-SQL)
ERROR_MESSAGE (Transact-SQL) ERROR_MESSAGE (Transact-SQL)
ERROR_NUMBER (Transact-SQL) ERROR_NUMBER (Transact-SQL)
ERROR_PROCEDURE (Transact-SQL) ERROR_PROCEDURE (Transact-SQL)
ERROR_SEVERITY (Transact-SQL) ERROR_SEVERITY (Transact-SQL)
RAISERROR (Transact-SQL) RAISERROR (Transact-SQL)
@@ERROR (Transact-SQL) @@ERROR (Transact-SQL)
Referência de Erros e Eventos (Mecanismo de Banco de Dados)Errors and Events Reference (Database Engine)