2009-03-05 7 views
6

Die meisten meiner SPs können einfach mit manuell eingegebenen Daten ausgeführt (und getestet) werden. Das funktioniert gut und die Verwendung einfacher PRINT-Anweisungen erlaubt mir das "Debuggen".Was ist Ihre bevorzugte Methode zum Debuggen gespeicherter MS SQL-Prozeduren?

Es gibt jedoch Fälle, in denen mehr als eine gespeicherte Prozedur beteiligt ist und das Finden gültiger Daten für die Eingabe mühsam ist. Es ist einfacher, Dinge aus meiner Web-App auszulösen.

Ich habe ein wenig Erfahrung mit dem Profiler, aber ich habe keine Möglichkeit gefunden zu erkunden, was in meinen gespeicherten Prozeduren Zeile für Zeile abläuft.

Was sind Ihre Methoden?

Vielen Dank, wie immer.

Hinweis: Ich bin Verwendung von SQL Server unter der Annahme, 2005+

Antwort

8

Profiler ist sehr praktisch, fügen Sie einfach SP: StmtStarting-Ereignisse hinzu und filtern Sie die Aktivität nur auf Ihren Prozess, indem Sie SPID = xxx setzen. Sobald Sie es eingerichtet haben, ist es ein Kinderspiel zu sehen, was vor sich geht.

+0

+1 es ist sicher :) manchmal muss man den Debugger zwar hochkriegen (hoffentlich wie es geschrieben wird + die Tests gibt es aber nie) – eglasius

4

Sie können einen Debugger an Ihrem SQL-Server :) tatsächlich anhängen - von vs, da Sie, dass auf Ihrem SQL Server konfiguriert haben.

Überprüfen Sie diesen Link für weitere Informationen, beachten Sie, dass Sie Breakpoints setzen können :) https://web.archive.org/web/20090303135325/http://dbazine.com/sql/sql-articles/cook1.

Überprüfen Sie diesen Link für einen allgemeineren Satz info: http://msdn.microsoft.com/en-us/library/zefbf0t6.aspx

Update: In Bezug auf „Es gibt jedoch Fälle, in denen mehr als eine gespeicherte Prozedur beteiligt ist und gültige Daten zur Eingabe zu finden, ist mühsam Es ist einfacher. um Dinge aus meiner Web-App auszulösen. "

Ich schlage vor, dass Sie Integrationstests einrichten, die sich auf die spezifischen Methoden konzentrieren, die mit diesen Verfahren interagieren. Wenn die Prozeduren von der Web-App gesteuert werden, ist dies ein guter Platz, um gültige Tests und Eingaben zu haben, die Sie jederzeit ausführen können. Wenn es mehrere Apps gibt, die mit den Prozeduren interagieren, würde ich stattdessen die Einheiten testen, die die Prozeduren testen.

1

Ich bevorzuge nur gespeicherte Prozeduren für das Abrufen von Datasets zu verwenden, und jede komplexe "Arbeit" auf der Anwendungsseite zu tun. Weil Sie richtig sind, versuchen Sie "zu debuggen", was in den Eingeweiden einer vielschichtigen, Cursor-Schleifen-, Temp-Tabelle mit, verschachtelten gespeicherten Proc passiert ist sehr schwierig.

Das gesagt, MS KB 316549 beschreibt, wie Visual Studio verwendet wird, um gespeicherte Procs zu debuggen.

Laut diesem Artikel gibt es eine Reihe von Einschränkungen auf diese Weise debuggen:

  • Sie können nicht „brechen“ Ausführung.
  • Sie können nicht "bearbeiten und fortfahren."
  • Sie können die Reihenfolge der Anweisungsausführung nicht ändern.
  • Obwohl Sie den Wert von Variablen ändern können, werden Ihre Änderungen möglicherweise nicht wirksam, da die Variablenwerte zwischengespeichert werden.
  • Ausgabe von der SQL PRINT-Anweisung wird nicht angezeigt.

bearbeiten: Selbstverständlich, wenn Sie sind die Person, die diese gespeicherte Prozedur zu machen, dann macht es nicht "vielschichtigen, Cursor-Looping, temp-Tabelle, und verschachtelt".In meiner Rolle als DBA ist das jedoch etwas, was ich täglich von den App-Entwicklern treffe.

+0

Ein Datenbankentwickler kann Anwendungscode ähnlich wie gespeicherte Prozeduren anzeigen. – JohnW

+0

Sicher wird es schwer zu behandeln sein, wenn Sie annehmen, dass es schrecklich geschrieben ist. Ich würde genau das Gleiche für C# -Code sagen - wenn der Entwickler Müll schreibt, wirst du Müll bekommen. –

+0

Ich würde nie in Betracht ziehen, eine "vielschichtige, Cursor-Looping, Temp-Tabelle mit vielschichtigen verschachtelten gespeicherten Proc." Es gibt fast immer bessere Möglichkeiten, Geschäfte zu machen. Ich denke, der Punkt, den JohnW machte, war, dass wenn Sie so etwas tun würden, es per Definition für eine Datenbankperson schlecht wäre. – HLGEM

0

Wenn Sie nicht wissen, was die gültigen Eingänge sein würden, müssen Sie eine Vielzahl von Eingängen einschließlich besonders ungültiger Eingänge testen. Sie sollten Ihre Testfälle definieren, bevor Sie Ihre Procs schreiben. Dann haben Sie eine reproduzierbare Reihe von Tests, die jedes Mal ausgeführt werden, wenn jemand den komplexen Prozess ändert.

0

Mein Team verwendet SPs per Regel als unsere Schnittstelle zur Datenbank; Wir machen das so, dass der Benutzer der Anwendung NUR SPs ausführen kann (mit unserer Namenskonvention).

Eine bewährte Methode, die gut funktioniert, besteht darin, dass bestimmte Testskripte in den SP-Kommentaren enthalten sind und auf jeder Version eines SP oder bei der Entwicklung eines neuen SP ausgeführt werden müssen.

Sie sollten IMMER den SP immer so gründlich wie möglich testen, ohne dass eine Anwendungsebene involviert ist (z. B. über Management Studio).

0

Stellen Sie sicher Schritt in dem Haupt gespeicherte Prozedur in VS2005/2008, wenn es eine verschachtelte Funktion trifft, traf F11 (Schritt in) in eingeben .. .fortsetzen Debuggen ... Es war nicht sehr offensichtlich aus dem Debug-Menü.

1

Ich bevorzuge nicht zu debuggen, ich teste stattdessen dedizierte Entwicklung, die fast die Notwendigkeit beseitigt, zu debuggen.

+0

Ok, also wenn deine Tests scheitern und du nicht sicher bist wieso, tut TDD was ? –

+0

@Mr Grieves, Wenn meine Tests fehlschlagen, weiß ich fast immer, warum - meine Tests sagen mir normalerweise, was falsch ist. –

Verwandte Themen