ERROR_STATE (Transact-SQL)
Gilt für: SQL Server
Azure SQL verwaltete Instanz
Azure Synapse Analytics Platform System (PDW)
-SQL-Analyseendpunkt
in Microsoft Fabric
Warehouse in Microsoft Fabric Fabric
Gibt die Statusnummer des Fehlers zurück, der bewirkt hat, dass der CATCH-Block eines TRY…CATCH-Konstrukts ausgeführt wurde.
Transact-SQL-Syntaxkonventionen
Syntax
ERROR_STATE ( )
Hinweis
Informationen zum Anzeigen der Transact-SQL-Syntax für SQL Server 2014 (12.x) und früher finden Sie unter Dokumentation zu früheren Versionen.
Rückgabetypen
int
Rückgabewert
Wenn diese Funktion in einem CATCH-Block aufgerufen wird, wird die Statusnummer der Fehlermeldung zurückgegeben, die bewirkt hat, dass der CATCH-Block ausgeführt wurde.
Gibt NULL zurück, wenn die Funktion außerhalb des Bereichs eines CATCH-Blockes aufgerufen wird.
Bemerkungen
Einige Fehlermeldungen können für mehrere Elemente im Code für Microsoft SQL Server Datenbank-Engineausgelöst werden. So kann z. B. der Fehler "1105" aufgrund verschiedener Bedingungen ausgelöst werden. Jeder Bedingung, die den Fehler auslöst, wird ein eindeutiger Statuscode zugewiesen.
Beim Anzeigen von Datenbanken mit bekannten Problemen, wie z. B. der Microsoft Knowledge Base, können Sie mithilfe der Statusnummer ermitteln, ob das aufgezeichnete Problem mit dem aufgetretenen Fehler übereinstimmt. Wenn z. B. ein Knowledge Base-Artikel den Fehler 1105 mit dem Status 2 erläutert und die von Ihnen empfangene Fehlermeldung 1105 den Status 3 aufweist, ist der Fehler wahrscheinlich auf eine andere als die im Artikel gemeldete Ursache zurückzuführen.
Der SQL Server Software Service kann ebenfalls mithilfe des Fehlerzustandscodes die Stelle im Quellcode finden, an der dieser Fehler ausgelöst wird. Dies kann Anregungen für die Diagnose des Problems bereitstellen.
ERROR_STATE kann überall innerhalb des Bereichs eines CATCH-Blockes aufgerufen werden.
ERROR_STATE gibt den Fehlerzustand zurück. Dabei spielt es keine Rolle, wie oft die Funktion ausgeführt wird oder wo sie innerhalb des Bereichs des CATCH-Blockes ausgeführt wird. Dies steht im Gegensatz zu Funktionen, wie @@ERROR, die nur die Fehlernummer in der Anweisung zurückgibt, die unmittelbar auf die einen Fehler verursachende Anweisung folgt, oder in der ersten Anweisung eines CATCH-Blockes.
In geschachtelten CATCH-Blöcken gibt ERROR_STATE den Fehlerzustand für den Bereich des CATCH-Blockes zurück, in dem auf die Funktion verwiesen wird. Beispielsweise könnte der CATCH-Block eines äußeren TRY...CATCH-Konstrukts ein geschachteltes TRY...CATCH-Konstrukt aufweisen. Innerhalb des geschachtelten CATCH-Blockes gibt ERROR_STATE den Status des Fehlers zurück, der den geschachtelten CATCH-Block aufgerufen hat. Wenn ERROR_STATE im äußeren CATCH-Block ausgeführt wird, wird der Status des Fehlers zurückgegeben, der diesen CATCH-Block aufgerufen hat.
Beispiele
A. Verwenden von ERROR_STATE in einem CATCH-Block
Das folgende Beispiel zeigt eine SELECT
-Anweisung, die einen Fehler aufgrund einer Division durch 0 (null) generiert. Der Status des Fehlers wird zurückgegeben.
BEGIN TRY
-- Generate a divide by zero error
SELECT 1/0;
END TRY
BEGIN CATCH
SELECT ERROR_STATE() AS ErrorState;
END CATCH;
GO
B. Verwenden von ERROR_STATE in einem CATCH-Block mit anderen Fehlerbehandlungstools
Das folgende Beispiel zeigt eine SELECT
-Anweisung, die einen Fehler aufgrund einer Division durch 0 (null) generiert. Zusammen mit dem Fehlerzustand werden Informationen zu dem Fehler zurückgegeben.
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
Beispiele: Azure Synapse Analytics und Analytics-Plattformsystem (PDW)
C. Verwenden von ERROR_STATE in einem CATCH-Block mit anderen Fehlerbehandlungstools
Das folgende Beispiel zeigt eine SELECT
-Anweisung, die einen Fehler aufgrund einer Division durch 0 (null) generiert. Zusammen mit dem Fehlerzustand werden Informationen zu dem Fehler zurückgegeben.
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_MESSAGE() AS ErrorMessage;
END CATCH;
GO
Weitere Informationen
sys.messages (Transact-SQL)
TRY...CATCH (Transact-SQL)
ERROR_LINE (Transact-SQL)
ERROR_MESSAGE (Transact-SQL)
ERROR_NUMBER (Transact-SQL)
ERROR_PROCEDURE (Transact-SQL)
ERROR_SEVERITY (Transact-SQL)
RAISERROR (Transact-SQL)
@@ERROR (Transact-SQL)
Fehler- und Ereignisreferenz (Datenbank-Engine)