Ich habe gelesen, dass ERROR_STATE()
dies helfen kann, zwischen verschiedenen Zuständen / Orten im Quellcode zu unterscheiden, an denen der gleiche Fehlertyp auftreten kann. Aber mir ist nicht wirklich klar, wie nützlich es sein kann.
MSDN gibt an:
ERROR_STATE()
Gibt die Statusnummer des Fehlers zurück, der zur Ausführung des CATCH-Blocks eines TRY… CATCH-Konstrukts geführt hat.
Wie kann es wirklich genutzt werden? Kann mir jemand ein Beispiel geben, die in diesem Referenzartikel nicht wirklich helfen, die Dinge für mich gut zu erklären?
sql-server
sql-server-2008
error-handling
jaczjill
quelle
quelle
Error_State
Durch dieError_Number
Kombination erhalten Sie ein klareres Bild über einen Fehler.Antworten:
Der Zweck von SQL Server-Fehlerzuständen besteht darin, dass das SQL Server-Entwicklungsteam im Code die genaue Stelle identifizieren kann, an der Systemfehler aufgetreten sind, da viele Fehler an mehreren Stellen auftreten.
Sie als Endbenutzer (dh Entwickler von Anwendungen, die SQL Server verwenden) können den übergebenen Status auf ähnliche Weise verwenden,
RAISERROR
damit Ihr Produkt-Support den Ort identifizieren kann, an dem eine Prozedur einen Fehler auslöst, z. B.:Sehen Sie, wie Sie mit den beiden Status später unterscheiden können, welcher Fehlerfall aufgetreten ist. Bevor Sie sagen "aber ich kann mir die Fehlermeldung ansehen", sage ich Ihnen ein Wort: Internationalisierung.
quelle
Nein, es hilft Ihnen nicht herauszufinden, wo der Fehler aufgetreten ist. Hier ist ein kurzes Beispiel. Wenn Sie versuchen, durch 0 zu teilen, erhalten Sie eine Fehlermeldung mit einer Reihe von Details:
Ergebnis:
Sehen Sie die aufgerufene
State
mit einem Wert von 1?ERROR_STATE()
gibt diesen Wert zurück. Also, wenn Sie verwendenTRY/CATCH
:Ergebnis:
Das ist alles. In den meisten Szenarien nicht nützlich. Ich empfehle, mehr über die Fehlerbehandlung im Allgemeinen zu lesen, bevor Sie zu tief in bestimmte Funktionen eintauchen, die nützlich klingen.
http://msdn.microsoft.com/en-us/library/ms175976.aspx
http://www.sommarskog.se/error_handling_2005.html
quelle
Kurze Antwort - es kann nicht. Ein ERROR_STATE ist im Wesentlichen eine Unterteilung eines ERROR_NUMBER. Es kann Ihnen nicht sagen, welche Codezeile den Fehler verursacht hat (außer insofern, als ERROR_NUMBER und ERROR_STATE zusammen die Ursache des Fehlers angeben und dann die Ursache offensichtlich wird).
quelle