ERROR_LINE (Transact-SQL)

Devuelve el número de línea en que se produjo un error que provocó la ejecución del bloque CATCH de una construcción TRY…CATCH.

Sintaxis

ERROR_LINE()

Tipo de valor devuelto

int

Valor devuelto

Cuando se llama en un bloque CATCH:

  • Devuelve el número de línea en que se produjo el error.
  • Devuelve el número de línea de una rutina si el error se produjo en un procedimiento almacenado o desencadenador.

Devuelve NULL si se llama fuera del ámbito de un bloque CATCH.

Notas

Esta función se puede llamar desde cualquier lugar dentro del ámbito de un bloque CATCH.

ERROR_LINE devuelve el número de línea en que se produjo el error, independientemente de las veces que se llame o desde dónde se llame en el ámbito del bloque CATCH. En cambio, las funciones como @@ERROR sólo devuelven el número de error en la instrucción inmediatamente posterior a la que produjo el error o en la primera instrucción de un bloque CATCH.

En los bloques CATCH anidados, ERROR_LINE devuelve el número de línea del error específico del ámbito del bloque CATCH en el que se hace referencia al mismo. Por ejemplo, el bloque CATCH de una construcción TRY...CATCH podría contener una construcción TRY...CATCH anidada. Dentro del bloque CATCH anidado, ERROR_LINE devuelve el número de línea del error que invocó el bloque CATCH anidado. Si ERROR_LINE se ejecuta en el bloque CATCH externo, devuelve el número de línea del error que invocó ese bloque CATCH.

Ejemplos

A. Utilizar ERROR_LINE en un bloque CATCH

En el siguiente ejemplo de código se muestra una instrucción SELECT que genera un error de división por cero. Se devuelve el número de línea en que se produjo el error.

USE AdventureWorks;
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. Utilizar ERROR_LINE en un bloque CATCH con un procedimiento almacenado

En el siguiente ejemplo de código se muestra un procedimiento almacenado que genera un error de división por cero. ERROR_LINE devuelve el número de línea del procedimiento almacenado en que se produjo el error.

-- 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. Utilizar ERROR_LINE en un bloque CATCH con otras herramientas de control de errores

En el siguiente ejemplo de código se muestra una instrucción SELECT que genera un error de división por cero. Además del número de línea en que se produjo el error, se devuelve información relacionada con el mismo.

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

Vea también

Referencia

TRY...CATCH (Transact-SQL)
sys.messages (Transact-SQL)
ERROR_NUMBER (Transact-SQL)
ERROR_MESSAGE (Transact-SQL)
ERROR_PROCEDURE (Transact-SQL)
ERROR_SEVERITY (Transact-SQL)
ERROR_STATE (Transact-SQL)
RAISERROR (Transact-SQL)
@@ERROR (Transact-SQL)

Otros recursos

Recuperar información de errores en Transact-SQL
Usar TRY...CATCH en Transact-SQL
Usar RAISERROR
Niveles de gravedad de error del motor de base de datos

Ayuda e información

Obtener ayuda sobre SQL Server 2005