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