Partage via


Procédure de débogage des objets de base de données

S’applique à :SQL Server

SQL Server prend en charge le débogage d’objets Transact-SQL et Common Language Runtime (CLR) dans la base de données. Les principaux atouts du débogage dans SQL Server sont la facilité d’installation et d’utilisation, et l’intégration du débogueur SQL Server avec le débogueur Microsoft Visual Studio. En outre, le débogage fonctionne sur plusieurs langages. Les utilisateurs peuvent effectuer de façon transparente un pas à pas détaillé dans les objets CLR à partir de Transact-SQL et vice versa.

Le débogueur Transact-SQL dans SQL Server Management Studio ne peut pas être utilisé pour déboguer des objets de base de données managés, mais vous pouvez déboguer les objets à l’aide des débogueurs dans Visual Studio. Le débogage d’objets de base de données managé dans Visual Studio prend en charge toutes les fonctionnalités de débogage courantes, telles que pas à pas dans et pas à pas sur les instructions dans les routines s’exécutant sur le serveur. Les débogueurs peuvent définir des points d'arrêt, inspecter la pile des appels, inspecter les variables et modifier des valeurs de variables en cours de débogage.

Déboguer les autorisations et les restrictions

Le débogage est une opération hautement privilégiée. Par conséquent, seuls les membres du rôle serveur fixe sysadmin sont autorisés à déboguer dans SQL Server.

Les restrictions suivantes s'appliquent dans le cadre du débogage :

  • Le débogage des routines CLR est restreint à une instance de débogueur à la fois. Cette limitation s’applique car l’exécution du code CLR se bloque lorsqu’un point d’arrêt est atteint et l’exécution ne se poursuit pas tant que le débogueur avance du point d’arrêt. Toutefois, vous pouvez continuer à déboguer Transact-SQL dans d’autres connexions. Bien que le débogage Transact-SQL ne bloque pas d'autres exécutions sur le serveur, il peut entraîner l'attente d'autres connexions en raison de la rétention d'un verrou.

  • Les connexions existantes ne peuvent pas être déboguées, seules les nouvelles connexions, car SQL Server nécessite des informations sur le client et l’environnement du débogueur avant que la connexion ne puisse être établie.

Nous vous recommandons donc de déboguer Transact-SQL et le code CLR sur un serveur de test, et non sur un serveur de production.

Vue d’ensemble

Le débogage dans SQL Server suit un modèle « par connexion ». Un débogueur peut détecter et déboguer des activités uniquement sur la connexion cliente à laquelle il est attaché. Étant donné que les fonctionnalités du débogueur ne sont pas limitées par le type de connexion, le flux de données tabulaire (TDS) et les connexions HTTP peuvent être débogués. Toutefois, SQL Server n’autorise pas le débogage des connexions existantes. Le débogage prend en charge toutes les fonctionnalités de débogage communes dans les routines qui s'exécutent sur le serveur. L’interaction entre un débogueur et SQL Server s’effectue par le biais d’un modèle COM (Component Object Model) distribué.

Pour plus d’informations et de scénarios sur le débogage de procédures stockées gérées, de fonctions, de déclencheurs, de types définis par l’utilisateur et d’agrégats, consultez Débogage de la base de données d’intégration CLR SQL Server dans la documentation Visual Studio.

Le protocole réseau TCP/IP doit être activé sur l’instance SQL Server afin d’utiliser Visual Studio pour le développement et le débogage distants. Pour plus d’informations sur l’activation du protocole TCP/IP sur le serveur, consultez Configurer des protocoles clients.

Étapes de débogage

Procédez comme suit pour déboguer un objet de base de données CLR dans Microsoft Visual Studio :

  1. Ouvrez Microsoft Visual Studio et créez un projet SQL Server. Vous pouvez utiliser l’instance SQL LocalDB fournie avec Visual Studio.

  2. Créez un type de CLR SQL (C#) :

    1. Dans l’Explorateur de solutions, cliquez avec le bouton droit sur le projet, puis sélectionnez Ajouter, Nouvel élément….
    2. Dans la fenêtre Ajouter un nouvel élément, sélectionnez procédure stockée SQL CLR C#, Fonction définie par l’utilisateur SQL CLR C#, Type défini par l’utilisateur SQL CLR C#, Déclencheur SQL CLR C#, Agrégat SQL CLR C# ou Classe.
    3. Spécifiez un nom pour le fichier source du nouveau type, puis sélectionnez Ajouter.
  3. Ajoutez le code du nouveau type à l'éditeur de texte. Pour obtenir un exemple de code pour une procédure stockée, consultez la section Exemple correspondante plus loin dans cet article.

  4. Ajoutez un script qui teste le type :

    1. Dans l’Explorateur de solutions, cliquez avec le bouton droit sur le nœud du projet, puis sélectionnez Ajouter, Script….
    2. Dans la fenêtre Ajouter un nouvel élément, sélectionnez Script (Pas dans le build) et spécifiez un nom, tel que Test.sql. Cliquez sur le bouton Ajouter.
    3. Dans l’Explorateur de solutions, double-cliquez sur le nœud Test.sql pour ouvrir le fichier source du script de test par défaut.
    4. Ajoutez à l’éditeur de texte un script de test (qui appelle le code à déboguer). Consultez l’exemple dans la section suivante pour obtenir un exemple de script.
  5. Placez un ou plusieurs points d'arrêt dans le code source. Cliquez avec le bouton droit sur une ligne de code dans l’éditeur de texte sur la fonction ou la routine que vous souhaitez déboguer. Sélectionnez Point d’arrêt, Insérer un point d’arrêt. Le point d'arrêt est ajouté et la ligne de code est affichée en rouge.

  6. Dans le menu Débogage, sélectionnez Démarrer le débogage pour compiler, déployer et tester le projet. Le script de test dans Test.sql est exécuté et l’objet de base de données managé est invoqué.

  7. Lorsque la flèche jaune qui désigne le pointeur d’instruction apparaît au niveau du point d’arrêt, l’exécution du code est suspendue. Vous pouvez ensuite déboguer votre objet de base de données managé :

    1. Utilisez Pas à pas à partir du menu Débogage pour faire avancer le pointeur d’instruction vers la ligne de code suivante.
    2. Utilisez la fenêtre Variables locales pour observer l’état des objets actuellement mis en surbrillance par le pointeur d’instruction.
    3. Ajoutez des variables à la fenêtre Espion. Vous pouvez observer l’état des variables surveillées tout au long de la session de débogage, même si la variable n’est pas à la ligne de code actuellement mise en surbrillance par le pointeur d’instruction.
    4. Sélectionnez Continuer dans le menu Déboguer pour faire avancer le pointeur d’instruction jusqu’au point d’arrêt suivant ou pour terminer l’exécution de la routine s’il n’y a plus de points d’arrêt.

Exemple de code

L’exemple C# suivant retourne la version de SQL Server à l’appelant.

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);
        }
    }
}

Exemple de script de test

Le script de test suivant montre comment appeler la procédure stockée GetVersion définie dans l’exemple précédent.

EXECUTE GetVersion;