ERROR_LINE (Transact-SQL)

Se aplica a:SQL ServerAzure SQL DatabaseAzure SQL Managed Instance

Esta función devuelve el número de línea de la repetición de un error que provocó la ejecución del bloque CATCH de una construcción TRY…CATCH.

Convenciones de sintaxis de Transact-SQL

Sintaxis

ERROR_LINE ( )

Nota:

Para ver la sintaxis de Transact-SQL para SQL Server 2014 (12.x) y versiones anteriores, consulta la Documentación de versiones anteriores.

Tipo de valor devuelto

int

Valor devuelto

Cuando se llama en un bloque CATCH, ERROR_LINE devuelve

  • el número de línea donde se produjo el error.
  • el número de línea de una rutina, si el error se produjo en un procedimiento almacenado o desencadenador.
  • NULL, si se llamó desde fuera del ámbito del bloque CATCH.

Comentarios

Una llamada a ERROR_LINE se puede producir en cualquier lugar del ámbito de un bloque CATCH.

ERROR_LINE devuelve el número de línea en que se produjo el error. Esto ocurre independientemente de la ubicación de la llamada a ERROR_LINE dentro del ámbito del bloque CATCH y del número de llamadas a ERROR_LINE. Esto contrasta con las funciones, como @@ERROR. @@ERROR devuelve 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 específico.

Ejemplos

A. Utilizar ERROR_LINE en un bloque CATCH

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

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 este ejemplo se muestra un procedimiento almacenado que genera un error de división por cero. ERROR_LINE devuelve el número de línea donde 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 este ejemplo de código se muestra una instrucción SELECT que genera un error de división por cero. ERROR_LINE devuelve el número de línea donde se produjo el error y la información relacionada con el error propiamente dicho.

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  

Consulte también

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)