ERROR_LINE (Transact-SQL)

Retorna o número de linha na qual um erro ocorreu 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_LINE ( )

Tipo de retorno

int

Valor de retorno

Quando chamado em um bloco CATCH:

  • Retorna o número da linha na qual ocorreu o erro.

  • Retorna o número da linha em uma rotina se o erro ocorreu dentro de um procedimento armazenado ou gatilho.

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_LINE retorna o número da linha na qual o erro ocorreu, independentemente do número de vezes que ele é chamado ou se é chamado dentro do escopo do bloco CATCH. É diferente de funções como @@ERROR, que retornam um 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_LINE retorna o número da linha do erro específico ao escopo do bloco CATCH no qual é referenciado. Por exemplo, o bloco CATCH de uma construção TRY...CATCH poderia ter uma construção TRY...CATCH aninhada. Dentro do bloco CATCH aninhado, ERROR_LINE retorna o número da linha do erro que invocou o bloco CATCH aninhado. Se ERROR_LINE for executado em um bloco CATCH externo, retornará o número da linha do erro que invocou aquele bloco CATCH.

Exemplos

A. Usando ERROR_LINE 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 da linha na qual ocorreu o erro é retornado.

USE AdventureWorks2008R2;
GO

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

B. Usando ERROR_LINE em um bloco CATCH com um procedimento armazenado

O exemplo de código a seguir mostra um procedimento armazenado que gerará um erro de divisão por zero. ERROR_LINE retorna o número da linha no procedimento armazenado, na qual o erro ocorreu.

-- Verify that the stored procedure does not already exist.
IF OBJECT_ID ( 'usp_ExampleProc', 'P' ) IS NOT NULL 
    DROP PROCEDURE usp_ExampleProc;
GO

-- Create a stored procedure that 
-- generates a divide-by-zero error.
CREATE PROCEDURE usp_ExampleProc
AS
    SELECT 1/0;
GO

BEGIN TRY
    -- Execute the stored procedure inside the TRY block.
    EXECUTE usp_ExampleProc;
END TRY
BEGIN CATCH
    SELECT ERROR_LINE() AS ErrorLine;
END CATCH;
GO

C. Usando ERROR_LINE 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. Junto com o número da linha na qual o erro ocorreu, 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