ERROR_MESSAGE (Transact-SQL)

Gilt für:SQL ServerAzure SQL-DatenbankAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)SQL Analytics-Endpunkt in Microsoft FabricWarehouse in Microsoft Fabric

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

Transact-SQL-Syntaxkonventionen

Syntax

ERROR_MESSAGE ( )   

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ückgabetypen

nvarchar(4000)

Rückgabewert

Wenn ERROR_MESSAGE in einem CATCH-Block aufgerufen wird, wird der vollständige Text der Fehlermeldung zurückgegeben, die die Ausführung des CATCH-Blocks ausgelöst hat. Der Text umfasst die Werte, die für alle ersetzbaren Parameter angegeben werden, z.B. Längen, Objektnamen oder Zeitangaben.

ERROR_MESSAGE gibt NULL zurück, wenn die Funktion außerhalb des Bereichs eines CATCH-Blocks aufgerufen wird.

Bemerkungen

ERROR_MESSAGE kann überall im Bereich eines CATCH-Blocks aufgerufen werden.

ERROR_MESSAGE gibt unabhängig von der Anzahl der Aufrufe und dem Bereich des CATCH-Blocks eine relevante Fehlermeldung zurück. Dies steht im Gegensatz zu Funktionen wie @@ERROR – diese gibt nur eine Fehlernummer in der Anweisung zurück, die unmittelbar auf die Anweisung folgt, die einen Fehler auslöst.

ERROR_MESSAGE gibt in geschachtelten CATCH-Blöcken die Fehlermeldung für den entsprechenden Bereich des CATCH-Blocks zurück, der auf den CATCH-Block verwiesen hat. Zum Beispiel könnte der CATCH-Block eines äußeren TRY...CATCH-Konstrukts ein inneres TRY...CATCH-Konstrukt aufweisen. In diesem inneren CATCH-Block gibt ERROR_MESSAGE die Meldung des Fehlers zurück, der den inneren CATCH-Block aufgerufen hat. Wenn ERROR_MESSAGE im äußeren CATCH-Block ausgeführt wird, wird die Meldung des Fehlers zurückgegeben, der den äußeren CATCH-Block aufgerufen hat.

Beispiele

A. Verwenden von ERROR_MESSAGE in einem CATCH-Block

Das folgende Beispiel zeigt eine SELECT-Anweisung, die einen Fehler aufgrund einer Division durch 0 (null) generiert. Der CATCH-Block gibt die Fehlermeldung zurück.

BEGIN TRY  
    -- Generate a divide-by-zero error.  
    SELECT 1/0;  
END TRY  
BEGIN CATCH  
    SELECT ERROR_MESSAGE() AS ErrorMessage;  
END CATCH;  
GO  

Hier ist das Resultset.

-----------

(0 row(s) affected)

ErrorMessage
----------------------------------
Divide by zero error encountered.

(1 row(s) affected)

B. Verwenden von ERROR_MESSAGE in einem CATCH-Block mit anderen Fehlerbehandlungstools

Das folgende Beispiel zeigt eine SELECT-Anweisung, die einen Fehler aufgrund einer Division durch 0 (null) generiert. Der CATCH-Block gibt zusammen mir der Fehlermeldung Informationen zum Fehler 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  

Hier ist das Resultset.

-----------

(0 row(s) affected)

ErrorNumber ErrorSeverity ErrorState  ErrorProcedure  ErrorLine  ErrorMessage
----------- ------------- ----------- --------------- ---------- ----------------------------------
8134        16            1           NULL            4          Divide by zero error encountered.

(1 row(s) affected)

Weitere Informationen

sys.messages (Transact-SQL)
TRY...CATCH (Transact-SQL)
ERROR_LINE (Transact-SQL)
ERROR_MESSAGE (Transact-SQL)
ERROR_PROCEDURE (Transact-SQL)
ERROR_SEVERITY (Transact-SQL)
ERROR_STATE (Transact-SQL)
RAISERROR (Transact-SQL)
@@ERROR (Transact-SQL)
Fehler- und Ereignisreferenz (Datenbank-Engine)