Mark Aslan Kuschels Blog

SQL, Business Intelligence, Microsoft, .Net

T-SQL und .NET Debugging in SQL Server 2012

Bis SQL Server 2008 R2 war es üblich das Debuggen von .NET Code im SQL-Server sowie T-SQL-Abfragen mit der Premium Edition von Visual Studio durchzuführen. Wer versucht ein Datenbankprojekt in Visual Studio 2010 zu erstellen und es mit einer SQL Server 2012 Datenbank zu verbinden, erhält nur eine Fehlermeldung. Auch sucht man Datenbankprojekte in Visual Studio 2012 vergeblich, denn nun gibt es die SQL Server Data Tools, die übrigens auch für Visual Studio 2010 erhältlich sind.

Microsoft ist damit einen großen Schritt auf die SQL Server Entwicklergemeinde zugegangen, denn bisher war es immer erforderlich eine recht teure MSDN Premium Lizenz zu erwerben, wenn man die Datenbankprojekte nutzen wollte. Die SQL Server Datatools sind kostenfrei verfügbar und lassen sich auch mit der Visual Studio 2010 oder 2012 Shell benutzen, somit reicht es also aus eine Developer Edition des SQL Servers zu erwerben.
Es gibt nur einige Funktionen, die erst ab einer Professional Edition von Visual Studio verfügbar sind, wie das Unit Testen.

Nach der Installation steht einem auch in Visual Studio 2012 im Bereich SQL-Server wieder ein Datenbankprojekt zur Verfügung! Es wird bei den Projekten nun auch nicht mehr unterschieden, ob es sich um ein SQL Server Projekt für .NET Assemblies oder um ein Datenbankprojekt für Datenbankobjekte handelt. Nun findet sich beides im Datenbankprojekt!

Erstellen einer Assembly

Ein Datenbankprojekt wird um eine Assembly ergänzt sobald ein .NET Element dem Projekt hinzugefügt wird. Diese Objekte befinden sich beim Hinzufügen eines neuen Objektes im Abschnitt SQL CLR C#.
image

Um nun eine Assembly in einem Datenbankprojekt zu erzeugen muss nach dem Hinzufügen eines Elementes das Projekt kompiliert werden. Nehmen wir zum Beispiel die gute alte Hello World-Funktion:
image

Debuggen des Codes

Um .NET Code im SQL Server debuggen zu können ist es nicht länger erforderlich sich an den Prozess einer laufendenden Instanz anzuhängen. Alles was man braucht ist ein Skript, das nicht in den Build-Prozess integriert ist (siehe unten).
image

Mit diesem Skript lassen sich beliebige Abfragen ausführen und dann auch Debuggen. Doch wogegen wird denn ausgeführt, wenn es nicht ein laufender Prozess einer SQL Server Instanz ist? Die Data Tools bringen eine SQL Server 2012 LocalDB Instanz mit, diese wird zur Laufzeit instanziiert, wenn im Menü Debuggen der Menüpunkt Starten ausgewählt wird. Das erste Kompilieren kann je nach Geschwindigkeit des verwendeten Gerätes und Komplexität des Datenmodells durchaus einige Zeit dauern. Ist das Erstellen fertig gestellt, haben die Data Tools eine DACPAC Datei ausgegeben, deren Pfad in der Ausgabe zu sehen ist. In dem gleichen Pfad befindet sich dann auch die Assembly, hier im Beispiel Database1.dll.
image

Um nun ein Skript zu Debuggen bietet es sich an ein Skript zu öffnen, das außerhalb des Builds liegt, um es dann mit dem Debugger auszuführen, mit der Maus íst dabei neben dem Start-Knopf ein kleiner Pfeil zu betätigen um das Kontextmenü zu öffnen, alternativ tut es aber auch die Tastenkombination ALT+F5:
image

Mit dem Debugger lässt sich nun ein Einzelschritt (F11) durchführen, sodass der Cursor zu unserer Hello-World-Funktion springt. Hier ist es nun möglich, wie es findige C#-Entwickler von Visual Studio gewohnt sind, Variablenwerte einzusehen und das Ablaufen des Codes genauestens nachzuvollziehen. Und nun wünsche ich viel Spaß beim Debuggen :-)

image

Weiterführende Literatur und Links

Kapitel 4 des Buches Microsoft SQL Server 2012 - Überblick über Konfiguration, Administration, Programmierung.
Video2Brain Training zu Neues in SQL Server 2012
SQL Server Data Tools (SSDT) für Visual Studio 2010
SQL Server Data Tools (SSDT) für Visual Studio 2012

Original Blogpost im PTSGroup BI Blog und der Ceteris AG