ERROR_LINE (Transact-SQL)

Gilt für:SQL ServerAzure SQL-DatenbankAzure SQL Managed Instance

Diese Funktion gibt die Zeilennummer des Fehlers zurück, der die Ausführung des CATCH-Blocks eines TRY...CATCH-Konstrukts ausgelöst hat.

Transact-SQL-Syntaxkonventionen

Syntax

ERROR_LINE ( )

Hinweis

Informationen zum Anzeigen der Transact-SQL-Syntax für SQL Server 2014 (12.x) oder früher finden Sie unter Dokumentation zu früheren Versionen.

Rückgabetyp

int

Rückgabewert

Wenn die Funktion in einem CATCH-Block aufgerufen wird, gibt ERROR_LINE

  • die Nummer der Zeile zurück, in der der Fehler aufgetreten ist
  • die Zeilennummer in einer Routine zurück, wenn der Fehler in einer gespeicherten Prozedur oder einem Trigger aufgetreten ist
  • NULL zurück, wenn sie außerhalb des Bereichs eines CATCH-Blocks aufgerufen wurde.

Hinweise

Ein Aufruf von ERROR_LINE kann überall im Bereich eines CATCH-Blocks auftreten.

ERROR_LINE gibt die Nummer der Zeile zurück, in der der Fehler aufgetreten ist. Dies geschieht unabhängig davon, wo ERROR_LINE innerhalb des Bereichs vom CATCH-Block aufgerufen wurde, und unabhängig davon, wie oft ERROR_LINE aufgerufen wurde. Dies steht im Gegensatz zu Funktionen wie @@ERROR. @@ERROR gibt eine Fehlernummer in der Anweisung zurück, die unmittelbar auf die folgt, die einen Fehler verursacht hat sowie in der ersten Anweisung eines CATCH-Blocks.

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. Wenn ERROR_LINE im äußeren CATCH-Block ausgeführt wird, gibt es die Zeilennummer des Fehlers zurück, der den spezifischen CATCH-Block aufgerufen hat.

Beispiele

A. Verwenden von ERROR_LINE in einem CATCH-Block

In diesem Codebeispiel wird eine SELECT-Anweisung dargestellt, die einen Fehler aufgrund einer Division durch 0 (null) generiert. ERROR_LINE gibt die Nummer der Zeile zurück, in der der Fehler aufgetreten ist.

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

Dieses Beispiel zeigt eine gespeicherte Prozedur, in der ein Fehler aufgrund einer Division durch 0 (null) generiert wird. ERROR_LINE gibt die Nummer der Zeile 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

In diesem Codebeispiel wird eine SELECT-Anweisung dargestellt, die einen Fehler aufgrund einer Division durch 0 (null) generiert. ERROR_LINE gibt die Nummer der Zeile, in der der Fehler aufgetreten ist, sowie Informationen zum Fehler selbst zurück.

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  

Weitere Informationen

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)