ERROR_NUMBER (Transact-SQL)

Retorna o número do erro que fez o bloco CATCH de uma construção TRY…CATCH ser executado.

Ícone de vínculo de tópicoConvenções de sintaxe Transact-SQL

Sintaxe

ERROR_NUMBER ( )

Tipos de retorno

int

Valor de retorno

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

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

Comentários

Esta função pode ser chamada em qualquer lugar dentro do escopo de um bloco CATCH.

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

Em blocos CATCH aninhados, ERROR_NUMBER retorna o número do 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_NUMBER retorna o número do erro que invocou o bloco CATCH aninhado. Se ERROR_NUMBER for executado em um bloco CATCH externo, retornará o número do erro que invocou aquele bloco CATCH.

Exemplos

A. Usando ERROR_NUMBER em um bloco CATCH

O exemplo de código a seguir mostra uma instrução SELECT que gera um erro de divisão por zero. O número do erro é retornado.

USE AdventureWorks2008R2;
GO

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

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

O exemplo de código a seguir mostra uma instrução SELECT que gera um erro de divisão por zero. Juntamente com o número do erro, são retornadas as informações relacionadas ao erro.

USE AdventureWorks2008R2;
GO

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