Was ist der beste Weg, gespeicherte Prozeduren zu debuggen (und sprocs schreiben, die einfacher zu debuggen sind)?
Was sind gute Methoden für die Erstellung von sprocs, dass die Schmerzen zu reduzieren und Debuggen? Und welche tools sind da draußen für das Debuggen gespeicherter Prozeduren?
Vielleicht am wichtigsten ist, was sind Anzeichen dafür Ausschau, dass Fehler passiert sind, die in einem sproc und nicht in den code? Ich hoffe, ich bin nicht über das ganze Brett zu furchtbar schlecht hier. Stimmen für die Antworten zu jedem der oben genannten. Danke.
Für was es Wert ist, ich arbeite in einem .NET-Umfeld, SQL-Server.
InformationsquelleAutor der Frage MrBoJangles | 2008-09-19
Du musst angemeldet sein, um einen Kommentar abzugeben.
Einer Technik, die ich verwenden, die in gespeicherten Prozeduren, um Sie leichter zu Debuggen (ohne IDE oder Debugger) für SQL Server 2005 Verfahren:
Ich fügen Sie einen Eingabe-parameter mit dem Namen @Debug = 0 (voreingestellt auf 0 = off) am Ende der Parameterliste für die Prozedur.
Ich dann hinzufügen if (@Debug = 1) print '...';
Anweisungen in den code an wichtigen stellen anzuzeigen, die nützliche interne Werte etc.
Ja, es ist "old school" und Debuggern, mit denen Sie "walk the code" sind toll - aber so funktioniert es für jeden aus einer SQL-tool (einschließlich Personen Debuggen ohne Ihres gleichen IDE).
Ron
InformationsquelleAutor der Antwort Ron Savage
Anderen Technik, die ich verwenden für einfache Protokollierung und debugging ist eine Tabelle erstellen, die variable an der Spitze des Verfahrens:
am Ende des Verfahrens - das hängt davon ab, wie gut die aufrufende Anwendung protokolliert Ausgabe Ihrer Prozedur aufrufen, aber die app, die ich schrieb, protokolliert es alle. 🙂
InformationsquelleAutor der Antwort Ron Savage
Ich würde stark vorschlagen, dass Sie werfen Sie einen Blick auf die eingebauten Werkzeuge in SQL management studio.
ich geschrieben habe, einen ziemlich ausführlichen blog-Beitrag dazu hier:
http://www.diaryofaninja.com/blog/2010/11/23/debugging-sql-queries-function-amp-stored-procedures-with-sql-management-studio
im Grunde das wesentliche ist, dass Sie geben Sie sql-Abfrage zum ausführen der gespeicherten Prozedur, und statt der F5-Taste oder schlagen Sie das Ausrufezeichen, drücken Sie die play-Taste und die Taste F10 und F11, um Schritt über und Schritt in Ihr gespeicherte Prozeduren.
sehr sehr praktisch - und niemand scheint es zu benutzen.
InformationsquelleAutor der Antwort Doug
TSQLUnit
Dies ist ein unit-testing framework für SQL Server. Nicht gerade ein klassisches debugging-tool, aber es erlaubt Ihnen das schreiben von unit-tests für Ihre gespeicherten Verfahren, die helfen enorm bei der Identifizierung von Fehlern und zur Validierung erwartete Verhaltensweisen.
Zum Beispiel, Wenn Sie einen buggy stored proc, dann können Sie schreiben unit tests, um zu verstehen, wie es ist zu scheitern. Auch, wenn Sie eine änderung vornehmen, um Ihre SQL-code können Sie bestätigen, dass Ihre änderungen nicht zu brechen irgendetwas anderes, oder zumindest sagen, wo ein problem liegt.
Wenn etwas ist schwer zu testen, dann mag es ein gutes Indiz dafür, dass Sie Ihre gespeicherte Prozedur möglicherweise zu viel zu tun und könnte davon profitieren, wenn es aufgeteilt werden in mehr konzentrieren und gezielt ausgelöst wird. Diese procs sollte dann relativ einfach zu Debuggen und pflegen Sie langfristig.
InformationsquelleAutor der Antwort Ray Vega
Habe ich bemerkt, dass sich viele Vorschläge mit verschiedenen Umgebungen und Techniken zum Debuggen von SQL-procs, aber niemand hat erwähnt,DBFit. Wenn Sie nicht vertraut sind mit Passen und FitNesse dann tun Sie sich einen gefallen und schauen Sie nach oben. Mit diesen drei tools können Sie schnell bauen Sie sich eine ganze suite von Akzeptanz-tests, die Ihnen Frieden des Geistes zu wissen, können Sie umgestalten ungestraft.
DBFit ist einfach eine Reihe von Fit-VORRICHTUNGEN, die verwendet werden können zur Ausübung einer Datenbank. Mit Fitness können Sie schreiben, wie viele Permutationen der Anrufe auf Ihre gespeicherte Prozedur, wie Sie wollen, erstellen von tests für.
Dies ist nicht debugging per se, aber Sie würden erstaunt sein, wie schnell können Sie erkennen, ein problem haben Sie erst einmal eine ganze Batterie von tests, die für eine einzelne gespeicherte Prozedur. Einen fehlerhaften test führen Sie direkt zu dem problem und geben Sie den genauen Kontext, mit denen er scheiterte, so gibt es keine Vermutung der Arbeit. Am Anfang von allem, können Sie jetzt gestalten Sie Ihre gespeicherte Prozeduren, ohne Angst, weil du nur re-führen Sie die tests aus, um sicherzustellen, dass Sie nicht etwas zu brechen.
InformationsquelleAutor der Antwort Josh
Für Werkzeuge, können Sie mit Visual Studio zu Debuggen, SP.
Wenn die gespeicherte Prozedur hat lange Logik, Sie können es umgestalten, erstellen Sie separate gespeicherte Prozedur, und rufen Sie es von Ihrem Haupt-stored proc. Dies wird helfen, verringern Sie Ihre Tests auch, und die Leichtigkeit Sie zu finden, die Teil der Abfragen falsch ist.
InformationsquelleAutor der Antwort ChRoss
Dies ist möglicherweise eine persönliche Präferenz, aber ich finde es sehr schwierig zu Lesen SQL-Abfragen, die alle schlug auf eine einzige lange Zeile. Ich bevorzuge die folgenden Einzüge Stil:
Diese einfache übung hat mir eine Menge geholfen hat beim schreiben von gespeicherten Prozeduren, für ein neues Datenbank-schema. Durch das Aufbrechen der Aussagen auf vielen Linien wird es leichter zu identifizieren, den Täter, der einen Fehler in deinem query. In SQL Server Management Studio, zum Beispiel, die Nummer der Zeile, die Ausnahme gegeben ist, so kann man gezielt problematische code viel schneller.
Einfach auf die anderen Entwickler...nicht Stopfen 800 Zeichen einer SQL-Abfrage auf einer Linie. Sie bedanken sich später, wenn ein Datenbank-Feldname oder Datentyp-änderungen und niemand E-Mails die Sie.
InformationsquelleAutor der Antwort karlgrz
Ein paar Muster, die ich gesehen habe, erfolgreich eingesetzt werden 'Diagnose' oder 'test' - Modi und-Protokollierung.
test-oder Diagnose-Modi sind hilfreich, wenn Sie dabei dynamische SQL-Ausführung. Stellen Sie sicher, Sie können sehen, was Sie ausführen wollen. Wenn Sie Bereiche haben, wo Sie Sie brauchen (oder sollte) die Prüfung auf Fehler prüfen, die Protokollierung in eine Tabelle mit genug details, so können Sie diagnostizieren, was Los ist.
InformationsquelleAutor der Antwort craigb
Können Sie Sql server-Debuggen, aber ich habe festgestellt, dass ein Schmerz im nichts, aber die meisten direkt von Situationen (Debuggen auf einem lokalen server, etc). Ich habe noch etwas besseres zu finden als die print-Anweisungen, damit ich überwachen werde diesen thread mit Interesse.
InformationsquelleAutor der Antwort Danimal
Hier einige Tipps, wiederholte Sie mir heute - wenn Sie das hinzufügen einer Verknüpfung zu einer wichtigen Abfrage auf die Produktions-Datenbank, stellen Sie sicher, es ist sicher, wenn es ein null-Feld in die verknüpfte Tabelle.
Brach ich eine wichtige Seite für 20 Minuten, bevor wir herausgefunden, dass es war meine kleine, Eilte gespeicherten Prozedur ändern.
Und stellen Sie sicher, testen Sie Ihr Verfahren, wenn Sie eine änderung vornehmen. Um dies zu tun, ich mag eine einfache Testsequenz in den Kommentaren des Verfahrens. Obvisouly, ich habe versäumt, dies zu tun heute 🙁
InformationsquelleAutor der Antwort Seibar
Dies ist vielleicht nicht die Antwort, die du suchst, aber wenn Sie bereits in einem .Net-Umgebung LINQtoSQL hat stark reduziert die Menge der gespeicherten Prozeduren, die ich Schreibe verwenden//zu Debuggen.
Die Schwierigkeit der Fehlersuche in SQL ist einer der Gründe, Programmierung der business Logik in LINQ ist meine neue bevorzugte Praxis .
InformationsquelleAutor der Antwort ctrlShiftBryan
SQL Server 2008 Management Studio integrierten debugger aus Schritt-Weise debugging ein Kinderspiel (im Gegensatz judo-erforderlich, um herauszufinden, wie man VS2005 + SQL debug)
InformationsquelleAutor der Antwort stephbu
Ähnlich wie Ron Logging nennen wir ein logging-proc durch alle anderen gespeicherten Prozeduren dabei zu helfen, dass die Ablaufverfolgung auf alle Anrufe.
Eine gemeinsame BatchId wird das ganze zu ermöglichen die Ablaufverfolgung für eine bestimmte batch-Lauf.
Seine vielleicht nicht die meisten performant verarbeiten, aber es hilft grately beim aufspüren von Fehlern.
Es ist auch ziemlich einfach zu kompilieren Zusammenfassung der Berichte auf E-Mail-admins.
ie.
Beispiel Nennen
Main Proc
Sich vorwärts zu bewegen, es wäre schön zu nutzen, die CLR und schauen Sie etwas rufen wie Log4Net über SQL. Da unsere Anwendung code verwendet Log4Net wäre es von Vorteil, seine Hilfe bei der Integration der SQL-Seite der Prozesse in der gleichen Infrastruktur.
InformationsquelleAutor der Antwort Jafin