ERROR_LINE (Transact-SQL)
Gibt die Zeilennummer der Zeile zurück, in der der Fehler aufgetreten ist, der die Ausführung des CATCH-Blockes eines TRY…CATCH-Konstrukts bewirkt hat.
Transact-SQL-Syntaxkonventionen
Syntax
ERROR_LINE ( )
Rückgabetyp
int
Rückgabewert
Aufruf in einem CATCH-Block:
Gibt die Zeilennummer der Zeile zurück, in der der Fehler aufgetreten ist.
Gibt die Zeilennummer in einer Routine zurück, wenn der Fehler in einer gespeicherten Prozedur oder einem Trigger aufgetreten ist.
Gibt NULL zurück, wenn die Funktion außerhalb des Bereichs eines CATCH-Blockes aufgerufen wird.
Hinweise
Diese Funktion kann von einer beliebigen Stelle innerhalb des Bereichs eines CATCH-Blockes aufgerufen werden.
ERROR_LINE gibt die Zeilennummer der Zeile zurück, in der der Fehler aufgetreten ist, unabhängig von der Aufrufhäufigkeit bzw. der Stelle innerhalb des Bereichs des CATCH-Blockes, an dem ERROR_LINE aufgerufen wurde. Dies steht im Gegensatz zu Funktionen, wie @@ERROR, die eine Fehlernummer in der Anweisung zurückgeben, die unmittelbar auf jene folgt, die einen Fehler verursacht hat, oder in der ersten Anweisung eines CATCH-Blockes.
In geschachtelten CATCH-Blöcken gibt ERROR_LINE die für den Bereich des CATCH-Blockes spezifische Fehlerzeilennummer zurück, auf die im Block verwiesen wird. So könnte beispielsweise der CATCH-Block eines TRY…CATCH-Konstrukts ein geschachteltes TRY…CATCH-Konstrukt enthalten. Innerhalb des geschachtelten CATCH-Blocks gibt ERROR_LINE die Zeilennummer des Fehlers zurück, der den geschachtelten CATCH-Block aufgerufen hat. Wird ERROR_LINE im äußeren CATCH-Block ausgeführt, wird die Zeilennummer des Fehlers zurückgegeben, der den CATCH-Block aufgerufen hat.
Beispiele
A.Verwenden von ERROR_LINE in einem CATCH-Block
Das folgende Codebeispiel zeigt eine SELECT-Anweisung, die einen Fehler aufgrund einer Division durch 0 generiert. Es wird die Zeilennummer der Zeile zurückgegeben, in der der Fehler aufgetreten ist.
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.Verwenden von ERROR_LINE in einem CATCH-Block mit einer gespeicherten Prozedur
Das folgende Codebeispiel zeigt eine gespeicherte Prozedur, in der ein Fehler aufgrund einer Division durch 0 generiert wird. ERROR_LINE gibt die Zeilennummer in der gespeicherten Prozedur zurück, in der der Fehler aufgetreten ist.
-- 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.Verwenden von ERROR_LINE in einem CATCH-Block mit anderen Tools zur Fehlerbehandlung
Das folgende Codebeispiel zeigt eine SELECT-Anweisung, die einen Fehler aufgrund einer Division durch 0 generiert. Abgesehen von der Zeilennummer der Zeile, in der der Fehler aufgetreten ist, werden Informationen im Zusammenhang mit dem Fehler zurückgegeben.
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