Freigeben über


Gewusst wie: Debuggen von CLR-Datenbankobjekten

Gilt für:SQL Server

SQL Server stellt Unterstützung für das Debuggen von Transact-SQL und CLR-Objekten (Common Language Runtime) in der Datenbank bereit. Die Hauptaspekte des Debuggens in SQL Server sind die leichte Einrichtung und Handhabung und die Integration des SQL Server-Debuggers in den Microsoft Visual Studio-Debugger. Darüber hinaus ist das Debuggen sprachübergreifend. Benutzer können von Transact-SQL aus nahtlos in CLR-Objekte einsteigen und umgekehrt.

Der Transact-SQL Debugger in SQL Server Management Studio kann nicht zum Debuggen verwalteter Datenbankobjekte verwendet werden, Sie können die Objekte jedoch mithilfe der Debugger in Visual Studio debuggen. Das Debugging verwalteter Datenbankobjekte in Visual Studio unterstützt alle gängigen Debugfeatures wie die Anweisungen Schrittweise ausführen und Schritt über innerhalb von Routinen, die auf dem Server ausgeführt werden. Debugger können während des Debuggens Breakpoints festlegen, Aufruflisten prüfen, Variablen prüfen und Variablenwerte ändern.

Berechtigungen und Einschränkungen beim Debuggen

Das Debuggen ist ein hoch privilegierter Vorgang und daher nur Mitgliedern der festen Serverrolle sysadmin in SQL Server gestattet.

Während des Debuggens gelten die folgenden Einschränkungen:

  • Das Debuggen von CLR-Routinen kann nur von einer Debugger-Instanz gleichzeitig vorgenommen werden. Diese Einschränkung ist vorhanden, da jegliche CLR-Codeausführung beim Erreichen des Breakpoints eingefroren wird, und die Ausführung wird erst fortgesetzt, wenn der Debugger den Debugvorgang vom Breakpoint aus fortsetzt. Allerdings können Sie das Debuggen von Transact-SQL auf anderen Verbindungen fortführen. Beim Debuggen von Transact-SQL werden keine weiteren Ausführungsvorgänge auf dem Server angehalten, möglicherweise werden jedoch weitere Verbindungen aufgrund einer Sperre zurückgestellt.

  • Vorhandene Verbindungen können nicht gedebuggt werden, nur neue Verbindungen, da SQL Server Informationen zur Client- und Debuggerumgebung benötigt, bevor die Verbindung hergestellt werden kann.

Daher wird empfohlen, dass Transact-SQL- und CLR-Code auf einem Testserver und nicht auf einem Produktionsserver gedebuggt wird.

Übersicht

Das Debugging in SQL Server folgt einem Pro-Verbindung-Modell. Ein Debugger kann Aktivitäten nur auf der Clientverbindung erkennen und debuggen, zu der er verbunden ist. Da die Funktionalität des Debuggers nicht durch den Verbindungstyp beschränkt ist, können sowohl tabellarische Datenströme (TDS) als auch HTTP-Verbindungen gedebuggt werden. Sql Server lässt jedoch das Debuggen vorhandener Verbindungen nicht zu. Das Debuggen unterstützt alle üblichen Debugfunktionen innerhalb von Routinen, die auf dem Server ausgeführt werden. Die Interaktion zwischen einem Debugger und SQL Server erfolgt über das verteilte Component Object Model (COM).

Weitere Informationen und Szenarien zum Debuggen von verwalteten gespeicherten Prozeduren, Funktionen, Triggern, benutzerdefinierten Typen und Aggregaten finden Sie unter SQL Server CLR Integration Datenbank Debugging in der Visual Studio-Dokumentation.

Das TCP/IP-Netzwerkprotokoll muss auf der SQL Server-Instanz aktiviert sein, um Visual Studio für die Remote-Entwicklung, das Debugging und die Entwicklung verwenden zu können. Weitere Informationen zum Aktivieren des TCP/IP-Protokolls auf dem Server finden Sie unter Konfigurieren von Clientprotokollen.

Fehlersuche-Schritte

Führen Sie die folgenden Schritte aus, um ein CLR-Datenbankobjekt in Microsoft Visual Studio zu debuggen:

  1. Öffnen Sie Microsoft Visual Studio, und erstellen Sie ein neues SQL Server-Projekt. Sie können die SQL LocalDB-Instanz verwenden, die im Lieferumfang von Visual Studio enthalten ist.

  2. Erstellen eines neuen SQL CLR-Typs (C#):

    1. Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf das Projekt und wählen Sie Hinzufügen, Neuer Artikel....
    2. Im Fenster Neuen Artikel hinzufügen wählen Sie SQL CLR C# gespeicherte Prozedur, SQL CLR C# benutzerdefinierte Funktion, SQL CLR C# benutzerdefinierter Typ, SQL CLR C# Trigger, SQL CLR C# Aggregate oder Klasse.
    3. Geben Sie einen Namen für die Quelldatei des neuen Typs an, und wählen Sie dann Hinzufügen aus.
  3. Fügen Sie Code für den neuen Typ zum Texteditor hinzu. Beispielcode für ein als Beispiel gespeicherte Prozedur finden Sie in einem nachfolgenden Abschnitt in diesem Artikel.

  4. Fügen Sie ein Skript hinzu, das den Typ testet:

    1. Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf den Projekt-Node, und wählen Sie Hinzufügen, Skript aus.
    2. Wählen Sie im Fenster Neuen Artikel hinzufügen die Option Skript (Nicht im Build) aus, und geben Sie einen Namen an, wie z B. Test.sql. Wählen Sie die Schaltfläche Hinzufügen aus.
    3. Doppelklicken Sie in Projektmappen-Explorer auf den Test.sql Node, um die Standardquelldatei des Testskripts zu öffnen.
    4. Fügen Sie das Testskript (das den zu debuggenden Code aufruft) in den Texteditor ein. Ein Beispielskript finden Sie im nächsten Abschnitt.
  5. Platzieren Sie einen oder mehrere Breakpoints im Quellcode. Klicken Sie mit der rechten Maustaste auf eine Codezeile im Texteditor in der Funktion oder Routine, die Sie debuggen möchten. Wählen Sie Breakpoint, Breakpoint einfügen aus. Der Breakpoint wird hinzugefügt und hebt die Codezeile in Rot hervor.

  6. Wählen Sie im Menü Debuggen die Option Debuggen starten aus, um das Projekt auszufüllen, bereitzustellen und zu testen. Das Testskript in Test.sql wird ausgeführt und das verwaltete Datenbankobjekt wird aufgerufen.

  7. Wenn der gelbe Pfeil (der den Befehlszeiger kennzeichnet) am Breakpoint erscheint, wird die Codeausführung angehalten. Anschließend können Sie das verwaltete Datenbankobjekt debuggen:

    1. Verwenden Sie Überspringen aus dem Menü Debuggen, um den Befehlszeiger auf die nächste Codezeile zu setzen.
    2. Verwenden Sie das Fenster Locals, um den Zustand der Objekte zu beobachten, die derzeit vom Befehlszeiger hervorgehoben sind.
    3. Fügen Sie dem Überwachungsfenster Variablen hinzu. Sie können den Zustand überwachter Variablen während der gesamten Debugsitzung beobachten, auch wenn die Variable nicht in der Codezeile steht, die derzeit vom Anweisungszeiger hervorgehoben ist.
    4. Wählen Sie im Menü Debuggen die Option Fortsetzen, um den Befehlszeiger zum nächsten Breakpoint zu bewegen oder die Ausführung der Routine abzuschließen, wenn es keine weiteren Breakpoints gibt.

Beispielcode

Im folgenden C#-Beispiel wird die SQL Server-Version an den Aufrufer zurückgegeben.

using System.Data.SqlClient;
using Microsoft.SqlServer.Server;

public class StoredProcedures
{
    [Microsoft.SqlServer.Server.SqlProcedure]
    public static void GetVersion()
    {
        using (var connection = new SqlConnection("context connection=true"))
        {
            connection.Open();
            var command = new SqlCommand("select @@version", connection);
            SqlContext.Pipe.ExecuteAndSend(command);
        }
    }
}

Beispiel Testskript

Das folgende Testskript zeigt, wie Sie die im vorherigen Beispiel definierte gespeicherte Prozedur GetVersion aufrufen.

EXECUTE GetVersion;