Wie man sql-Fehler in der gespeicherten Prozedur
Ich bin mit SQL Server 2005. Ich erstellt eine gespeicherte Prozedur, die meiste Zeit über funktioniert, aber ich fand ein Beispiel, wo es nicht tun, was ich will.
Aktuell ist der code so etwas wie dieses
if @@error <> 0
begin
select @message_error = "There was a database error adding product "+ @product + " to product line
end
Wo @message_error
ist eine output-variable.
So, ich kann select @@error
und erhalten eine Zahl, aber alles, was ich wirklich will, ist der SQL-Fehler.
Etwas wie Hey, ich konnte nicht tun dies, weil es einen fk-constraint auf diese Spalte oder was auch immer. Ich fand diesen Artikel auf der msdn-Website
http://msdn.microsoft.com/en-us/library/ms178592(v=sql.90).aspx
Aber es geht nur über auslösen benutzerdefinierter Ausnahmen mit RAISERROR
ich will nicht meine eigene Fehlermeldung, oder die Ausnahme, ich möchte nur wissen, warum Dinge nicht funktionieren. Ich kann die gespeicherte Prozedur ausführen, durch Management-Studio und sehen die genauen SQL-Fehler, aber das ist mühsam versucht, die Daten von der Website und manuell einfügen das es so ist.
Wie bekomme ich den SQL Fehler text in eine output-variable?
InformationsquelleAutor Steve's a D | 2012-11-30
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hier ist Teil einer gespeicherten Prozedur Vorlage, die ich verwenden:
Try/Catch-Blöcke können schwierig sein, aber Sie sind viel gründlicher als @@error. Noch wichtiger ist, Sie können die verschiedenen error_xxx () - Funktionen in Ihnen. Hier Lagere ich die richtige Fehlermeldung in variable @ErrorMessage, zusammen mit genug anderen Daten zu re-raisen Sie den Fehler. Von hier aus, eine beliebige Anzahl von Optionen zur Verfügung, Sie könnten machen, @ErrorMessage eine output-variable, testen und behandeln bestimmte Fehler, oder bauen Sie Ihre eigenen Fehlermeldungen (oder passen das vorhandene an, klarer zu werden-Sie kann gereizt, herauszufinden, wie oft Sie wollen, das zu tun). Andere Optionen präsentieren themsleves.
Etwas zu suchen: in einigen Situationen, SQL werfen zwei Fehlermeldungen zurück... und
error_message()
nur fangen die letzten, die in der Regel etwas sagt wie "attempt to create object failed", mit der wirkliche Fehler in der ersten Fehlermeldung. Dies ist, wo bauen Sie Ihre eigenen Fehler Meldung kommt.Ich nenne
Error_Message()
auf einem anderen server, aber Ihr bekommt NULL !!? Andere Möglichkeit zum abfangen von Fehlern auf server-und Eine Sp auf server B in diesem Modell, wenn ein Fehler ausgelöst, der auf server A, im Catch-block des Servers Ein Aufruf einer SP von server B. aber das funktioniert nicht ! warum ?das ist ein Komplex genug, Problem ist, das Sie wirklich posten soll es als seine eigene Frage--, und fügen Sie einen link, um es hier als Kommentar.
InformationsquelleAutor Philip Kelley
Könnte man eine Allgemeine Try/Catch und dann bauen Sie mehr details über den Fehler innerhalb des CATCH-Abschnitt z.B.
InformationsquelleAutor Myles J
verwenden von try ... catch und catch-block, den Sie verwenden können, ERROR_MESSAGE(), ERROR_LINE(), ERROR_PROCEDURE(), ERROR_STATE(), ERROR_SEVERITY(), ERROR_NUMBER () - Funktionen
InformationsquelleAutor Eduard Bader