Suchen...
Generic filters
Exact matches only
Search in title
Search in excerpt
Search in content

Debuggen von SQL-Skripten

Die Nutzung von Prozeduren in relationalen Anwendungen erfreut sich großer Beliebtheit, bietet Sie doch die Möglichkeit, bestimmte Prozesse der Datenverarbeitung in Form einer leicht erlernbaren Sprache (TSQL) Schritt für Schritt abzuarbeiten oder zum Beispiel komplexe Berechnungsfunktionen auszulagern, die mit mengenbasierten Operationen nicht möglich oder nicht sinnvoll sind. Plausibilitäts- und Berechtigungsprüfungen bei Eingabeanwendungen sind damit ebenso leicht umsetzbar, wie größere Konvertierungsroutinen.

Je komplexer diese Programme werden, umso schwieriger ist es, im Falle eines Fehlverhaltens, die richtige Stelle im Code zu finden. Professionelle Programmierumgebungen wie z.B. Visual Studio bieten dafür Debugger. Im SQL-Server 2005 suchte man noch vergebens nach einer solchen Funktion. Seit der SQL Server Version 2008 bietet Microsoft aber endlich wieder die Möglichkeit SQL-Skripte zu debuggen.

Um SQL-Skripte debuggen zu können muss das entsprechende Skript im SQL Server Management Studio geöffnet sein. Zum Starten des Debuggens wird im Menü Debuggen der Eintrag “Debuggen starten” geklickt.

2012-05-25_crew_Debuggen starten

Alternativ kann entweder die Tastenkombination Alt+F5 gedrückt oder in der Symbolleiste der kleine grüne Pfeil angeklickt werden.

2012-05-25_crew_SQL Server Mangagement Studio

Anschließend werden der Objekt-Explorer und die registrierten Server ausgeblendet und zwei neue Fenster, Lokal und Aufrufliste, zusätzlich angezeigt. In der Symbolleiste erscheint ein neuer Bereich, der den Schnellzugriff auf die wichtigsten Debug-Funktionen gewährt.

2012-05-25_crew_Debuggen

Über die Debuggen-Symbolleiste können folgende Funktionen ausgeführt werden, welche ebenfalls über das Menü Debuggen erreichbar sind.

  • Weiter (Alt+F5)
    Debug-Modus starten oder fortfahren.
  • Alle unterbrechen (Strg+Alt+Break)
    Anhalten des Debug-Modus.
  • Debuggen beenden (Umschalt+F5)
    Beenden des Debug-Modus.
  • Nächste Anweisung anzeigen
    Anzeigen des nächsten Befehls im SQL-Skript, ohne ihn auszuführen.
  • Einzelschritt(F11)
    Ausführen des nächsten Befehls. Handelt es sich dabei um eine Funktion oder eine Prozedur, springt der Debugger in den entsprechenden Quelltext.
  • Prozedurschritt(F10)
    Ausführen des nächsten Befehls. Handelt es sich dabei um eine Funktion oder eine Prozedur, führt der Debugger diese vollständig aus, der Quelltext wird nicht angezeigt.
  • Ausführen bis Rücksprung(Umschalt+F11)
    Ausführen des Skriptes bis zum Rücksprung aus einer Funktion oder Prozedur. Wird diese Funktion im Hauptskript gestartet, wird das Skript bis zum Ende ausgeführt.
  • Haltepunkt(Strg+Alt+B)
    Aktivieren des Haltepunktfensters.

Im folgenden fiktiven Beispielskript wird eine Variable namens @Counter bei jedem Schleifendurchlauf um eins erhöht, bis die Zahl 100 erreicht wird. Bei jedem Durchgang wird der aktuelle Wert der Variable über den Printbefehl ausgegeben.

Declare @Counter int
set @Counter = 0

while @Counter < 100
Begin
    set @Counter = @Counter + 1
    Print @Counter
End

Beim Aktivieren der Tastenkombination Alt+F5 bzw. des Menüeintrages Debuggen – Debuggen starten, wird das Debug-Fenster geöffnet und die erste Anweisung des SQL-Skriptes wird ausgeführt, im aktuellen Skript die Deklaration der Variablen @Counter.

2012-05-25_crew_Debuggen_Fenster

Der kleine gelbe Pfeil im Debug-Fenster zeigt an, welcher Befehl als nächstes ausgeführt wird. Im Fenster Lokal werden alle lokal deklarierten Variablen mit ihrem entsprechenden Datentyp aufgeführt, außerdem wird der aktuelle Inhalt der Variablen in der Spalte Wert angezeigt. Da die Variable bis zu diesem Zeitpunkt nur deklariert aber ihr noch kein Wert zugewiesen wurde, ist die Spalte Wert leer. Durch Betätigen der Taste F11 wird die nächste Anweisung ausgeführt, der Variable @Counter wird der Wert 0 zugewiesen.

2012-05-25_crew_Aufrufliste

Im Fenster Aufrufliste ist ersichtlich, an welcher Stelle, d.h. in welchem Script und in welcher Zeile sich die Ausführung aktuell befindet.

2012-05-25_crew_Aufrufliste_2

Das Betätigen der Taste F10 bewirkt im aktuellen Beispiel das gleiche wie das der Taste F11. Stünde an der aktuellen Stelle der Aufruf einer Funktion, würde beim Betätigen der Taste F11 die Funktion geöffnet und ihr Quelltext angezeigt. Beim Betätigen der Taste F10 würde die komplette Funktion ausgeführt werden, ohne dass der Quelltext sichtbar wäre.

In größeren Skripten werden in der Regel mehrere Variablen deklariert, welche alle im Fenster lokal angezeigt und verfolgt werden können. Ist die Liste zu lang, kann durch Rechtsklick auf die entsprechende Variable im Fenster Lokal oder im Skriptfenster und anschließendem Aktivieren des Eintrages Überwachung hinzufügen, diese Variable in einem Extrafenster überwacht werden. Somit besteht die Möglichkeit, die interessanten Variablen in einem übersichtlicheren Fenster zu verfolgen.

2012-05-25_crew_Ueberwachen

Ist schon klar, an welcher Stelle sich das SQL-Skript nicht korrekt verhält, kann über einen Haltepunkt die entsprechende Stelle im Skript markiert werden. Der Debugger bleibt dann bei Aktivieren der Taste Alt+F5 an dieser Stelle stehen. Somit muss nicht jeder Schritt einzeln ausgeführt werden, bis die entsprechende Stelle erreicht wird. Haltepunkte, oder auch Breakpoints genannt, können über einen Rechtsklick im linken grauen Bereich des Skriptfensters aktiviert bzw. wieder deaktiviert werden. Die Taste F9 bewirkt das Gleiche.

2012-05-25_crew_Skriptfenster

Welche Haltepunkte im aktuellen Skript existieren und wie oft die Haltepunkte schon durchlaufen wurden, ist im Fenster Haltepunkte ersichtlich. In diesem Fenster können außerdem die Haltepunkte aktiviert, deaktiviert oder gelöscht werden. Zusätzlich kann an die entsprechende Stelle im Skript gesprungen werden.

2012-05-25_crew_Haltepunkte

Wurde das SQL-Skript komplett abgearbeitet, beendet sich der Debug-Modus automatisch und im Ausgabe-Fenster wird eine entsprechende Erfolgsmeldung ausgegeben.