ERROR_LINE (Transact-SQL)
Restituisce il numero di riga in cui si è verificato un errore che ha causato l'esecuzione del blocco CATCH di un costrutto TRY…CATCH.
Convenzioni della sintassi Transact-SQL
Sintassi
ERROR_LINE ( )
Tipo restituito
int
Valore restituito
Quando chiamata in un blocco CATCH:
restituisce il numero della riga in cui si è verificato un errore
restituisce il numero della riga in una routine se l'errore si è verificato all'interno di una stored procedure o di un trigger.
Restituisce NULL se chiamata all'esterno dell'ambito di un blocco CATCH.
Osservazioni
Questa funzione può essere chiamata ovunque all'interno dell'ambito di un blocco CATCH.
ERROR_LINE restituisce il numero della riga in cui si è verificato l'errore a prescindere dal numero di chiamate o dalla posizione in cui viene chiamata all'interno dell'ambito del blocco CATCH. Questo tipo di comportamento è in contrasto con le funzioni, ad esempio @@ERROR, che restituiscono un numero di errore nell'istruzione immediatamente successiva a quella che ha provocato un errore o nella prima istruzione di un blocco CATCH.
Nei blocchi CATCH nidificati, ERROR_LINE restituisce il numero della riga di errore specifico all'ambito del blocco CATCH che vi fa riferimento. Ad esempio, il blocco CATCH di un costrutto TRY…CATCH potrebbe contenere un costrutto TRY…CATCH nidificato. All'interno del blocco CATCH nidificato, ERROR_LINE restituisce il numero della riga per l'errore che ha richiamato il blocco CATCH nidificato. Se ERROR_LINE viene eseguita nel blocco CATCH esterno, restituisce il numero della riga per l'errore che ha richiamato il blocco CATCH.
Esempi
A.Utilizzo di ERROR_LINE in un blocco CATCH
Nell'esempio seguente viene illustrata un'istruzione SELECT che genera un errore di divisione per zero. Viene restituito il numero della riga in cui si è verificato l'errore.
USE AdventureWorks2012;
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.Utilizzo di ERROR_LINE in un blocco CATCH con una stored procedure
Nell'esempio di codice seguente viene illustrata una stored procedure che genererà un errore di divisione per zero. ERROR_LINE restituisce il numero di riga nella stored procedure in cui si è verificato l'errore.
-- 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.Utilizzo di ERROR_LINE in un blocco CATCH con altri strumenti per la gestione degli errori
Nell'esempio seguente viene illustrata un'istruzione SELECT che genera un errore di divisione per zero. Oltre al numero di riga in corrispondenza della quale si è verificato l'errore, vengono restituite le informazioni relative all'errore.
USE AdventureWorks2012;
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