ERROR_MESSAGE (Transact-SQL)

Retorna o texto da mensagem 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_MESSAGE ( )

Tipos de retorno

nvarchar(2048)

Valor de retorno

Quando chamado em um bloco CATCH, retorna o texto completo da mensagem do erro que fez o bloco ser executado. O texto inclui os valores fornecidos para qualquer parâmetro substituível, como comprimentos, nomes de objeto ou horas.

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

Comentários

ERROR_MESSAGE pode ser acionado em qualquer lugar dentro do escopo de um bloco CATCH.

ERROR_MESSAGE retorna a mensagem 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 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_MESSAGE retorna a mensagem de erro específica 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_MESSAGE retornará a mensagem de erro que invocou o bloco CATCH aninhado. Se ERROR_MESSAGE for executado em um bloco CATCH externo, retornará a mensagem de erro que invocou esse bloco CATCH.

Exemplos

A. Usando ERROR_MESSAGE 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. A mensagem do erro é retornada.

USE AdventureWorks;
GO

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

B. Usando ERROR_MESSAGE 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. Além da mensagem de erro, são retornadas as informações relacionadas ao erro.

USE AdventureWorks;
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