Partager via


Analyser le code T-SQL pour trouver des défauts

S'applique à : Serveur SQL Base de données Azure SQL Instance gérée Azure SQL Base de données SQL dans Microsoft Fabric

Vous pouvez améliorer la qualité du code Transact-SQL d'un schéma de base de données en l'important dans un projet de base de données et en analysant le code en fonction d'un ensemble de règles. Par exemple, vous pourriez vouloir trouver des erreurs dans un schéma que vous n'avez pas développé et dont la qualité n'a pas été vérifiée. Pour plus d'informations, voir la vue d'ensemble de l'analyse de code.

Pour cette évaluation initiale, vous voulez trouver tous les problèmes potentiels dans le code de la base de données. Vous examinez les avertissements et le code qui les a provoqués. Pour améliorer le code T-SQL, vous corrigez les avertissements, supprimez éventuellement un avertissement et analysez de manière itérative le projet de base de données.

Prérequis

Avant de pouvoir analyser le code d'un projet de base de données, vous devez déjà disposer d'un projet SQL. Pour plus d'informations sur l'utilisation d'une base de données existante pour créer un projet, consultez le Tutoriel : débuter à partir d'une base de données existante.

Activer l'analyse du code SQL lors de la génération du projet

Pour activer l'analyse du code SQL dans Visual Studio, cliquez avec le bouton droit sur le projet dans l'Explorateur de solutions et sélectionnez Propriétés. Dans l'onglet Analyse du code de la fenêtre propriétés, cochez la case Activer l'analyse du code lors de la génération.

Enregistrez la fenêtre propriétés du projet et revenez à l'explorateur de solutions.

Pour activer l'analyse du code SQL dans un projet SQL, modifiez le fichier .sqlproj directement. Ouvrez le fichier .sqlproj et ajoutez un élément <RunSqlCodeAnalysis>True</RunSqlCodeAnalysis> au premier bloc <PropertyGroup> pour permettre l'analyse du code.

Pour activer l'analyse du code SQL dans l'extension SQL Database Projects, modifiez le fichier .sqlproj directement. Ouvrez le fichier .sqlproj à partir de la vue Explorateur ou en cliquant avec le bouton droit sur le projet dans la vue Projets de base de données et en sélectionnant Modifier le fichier .sqlproj.

Dans l'éditeur de texte, ajoutez un élément <RunSqlCodeAnalysis>True</RunSqlCodeAnalysis> au premier bloc <PropertyGroup> pour permettre l'analyse du code.

Pour activer l'analyse du code SQL dans un projet SQL, modifiez le fichier .sqlproj directement. Ouvrez le fichier .sqlproj et ajoutez un élément <RunSqlCodeAnalysis>True</RunSqlCodeAnalysis> au premier bloc <PropertyGroup> pour permettre l'analyse du code.

Analyser le code

Pour analyser le code d'un projet de base de données dont l'analyse de code est activée lors de la génération, cliquez avec le bouton droit sur le projet dans l'Explorateur de solutions et sélectionnez Générer.

La fenêtre sortie affiche les résultats de l'ensemble du processus de génération.

Le code T-SQL de votre projet de base de données est analysé lors de la génération. Les erreurs et les avertissements issus de l'analyse du code apparaissent dans la Liste d’erreurs. Si la Liste d'erreurs ne s'affiche pas, ouvrez le menu Affichage et sélectionnez Liste d'erreurs. Vous pouvez double-cliquer sur un avertissement pour accéder à la ligne de code qui a provoqué l’avertissement.

Pour analyser le code d'un projet de base de données dont l'analyse de code est activée lors de la génération, cliquez avec le bouton droit sur le projet dans l'Explorateur de solutions et sélectionnez Générer.

La fenêtre sortie affiche les résultats de l'ensemble du processus de génération.

Le code T-SQL de votre projet de base de données est analysé lors de la génération. Les erreurs et les avertissements issus de l'analyse du code apparaissent dans la Liste d’erreurs. Si la Liste d'erreurs ne s'affiche pas, ouvrez le menu Affichage et sélectionnez Liste d'erreurs. Vous pouvez double-cliquer sur un avertissement pour accéder à la ligne de code qui a provoqué l’avertissement.

Pour analyser le code d'un projet de base de données dont l'analyse de code est activée lors de la génération, cliquez avec le bouton droit sur le projet dans la vue Projet de base de données et sélectionnez Générer.

La fenêtre sortie affiche les résultats de l'ensemble du processus de génération et toutes les erreurs ou avertissements issus de l'analyse du code. Les fichiers spécifiés dans chaque avertissement ou erreur sont des liens interactifs qui permettent de naviguer jusqu'à la ligne de code à l'origine de l'avertissement.

Pour analyser le code d'un projet de base de données dont l'analyse de code est activée lors de la génération, exécutez la commande dotnet build à partir de la ligne de commande dans le répertoire du projet.

dotnet build MyDatabaseProject.sqlproj

La production de la commande affiche les résultats de l'ensemble du processus de génération et toutes les erreurs ou avertissements issus de l'analyse du code.

Configurer des règles d’analyse du code

Pour désactiver ou activer une règle spécifique dans Visual Studio, cliquez avec le bouton droit sur le projet dans l'Explorateur de solutions et sélectionnez Propriétés. Dans l'onglet Analyse du code de la fenêtre propriétés, sélectionnez la règle dans la table. Pour modifier la gravité d'une règle, cochez la case Traiter l'avertissement comme une erreur pour cette règle dans la liste.

Enregistrez la fenêtre propriétés du projet et revenez à l'explorateur de solutions.

Pour désactiver ou activer une règle spécifique dans un projet SQL, modifiez le fichier .sqlproj directement. Ouvrez le fichier .sqlproj et ajoutez ou modifiez l'élément SqlCodeAnalysisRules dans le premier bloc <PropertyGroup> pour spécifier les règles à activer ou à désactiver. L'exemple de configuration suivant désactive deux règles (SR0007 et SR0006) et fait basculer la règle SR0008 vers une erreur de génération. Les autres règles sont activées par défaut.

<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build">
  <Sdk Name="Microsoft.Build.Sql" Version="0.2.0-preview" />
  <PropertyGroup>
    <Name>AdventureWorks</Name>
    <DSP>Microsoft.Data.Tools.Schema.Sql.Sql160DatabaseSchemaProvider</DSP>
    <ModelCollation>1033, CI</ModelCollation>
    <RunSqlCodeAnalysis>True</RunSqlCodeAnalysis>
    <SqlCodeAnalysisRules>-Microsoft.Rules.Data.SR0006;-Microsoft.Rules.Data.SR0007;+!Microsoft.Rules.Data.SR0008</SqlCodeAnalysisRules>
  </PropertyGroup>
...

Pour désactiver ou activer une règle spécifique dans l'extension SQL Database Projects, modifiez le fichier .sqlproj directement. Ouvrez le fichier .sqlproj à partir de la vue Explorateur ou en cliquant avec le bouton droit sur le projet dans la vue Projets de base de données et en sélectionnant Modifier le fichier .sqlproj.

Ajoutez ou modifiez l'élément SqlCodeAnalysisRules dans le premier bloc <PropertyGroup> pour spécifier les règles à activer ou à désactiver. L'exemple de configuration suivant désactive deux règles (SR0007 et SR0006) et fait basculer la règle SR0008 vers une erreur de génération. Les autres règles sont activées par défaut.

<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build">
  <Sdk Name="Microsoft.Build.Sql" Version="0.2.0-preview" />
  <PropertyGroup>
    <Name>AdventureWorks</Name>
    <DSP>Microsoft.Data.Tools.Schema.Sql.Sql160DatabaseSchemaProvider</DSP>
    <ModelCollation>1033, CI</ModelCollation>
    <RunSqlCodeAnalysis>True</RunSqlCodeAnalysis>
    <SqlCodeAnalysisRules>-Microsoft.Rules.Data.SR0006;-Microsoft.Rules.Data.SR0007;+!Microsoft.Rules.Data.SR0008</SqlCodeAnalysisRules>
  </PropertyGroup>
...

Pour désactiver ou activer une règle spécifique dans un projet SQL, modifiez le fichier .sqlproj directement. Ouvrez le fichier .sqlproj et ajoutez ou modifiez l'élément SqlCodeAnalysisRules dans le premier bloc <PropertyGroup> pour spécifier les règles à activer ou à désactiver. L'exemple de configuration suivant désactive deux règles (SR0007 et SR0006) et fait basculer la règle SR0008 vers une erreur de génération. Les autres règles sont activées par défaut.

<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build">
  <Sdk Name="Microsoft.Build.Sql" Version="0.2.0-preview" />
  <PropertyGroup>
    <Name>AdventureWorks</Name>
    <DSP>Microsoft.Data.Tools.Schema.Sql.Sql160DatabaseSchemaProvider</DSP>
    <ModelCollation>1033, CI</ModelCollation>
    <RunSqlCodeAnalysis>True</RunSqlCodeAnalysis>
    <SqlCodeAnalysisRules>-Microsoft.Rules.Data.SR0006;-Microsoft.Rules.Data.SR0007;+!Microsoft.Rules.Data.SR0008</SqlCodeAnalysisRules>
  </PropertyGroup>
...

Supprimer des avertissements liés à l’analyse du code

Pour supprimer une erreur ou un avertissement d'analyse de code pour un fichier .sql spécifique dans Visual Studio, cliquez avec le bouton droit sur l'avertissement dans la liste d'erreurs et sélectionnez Supprimer le(s) message(s) d'analyse de code statique. Le résultat de l'analyse de code pour cette règle et ce fichier .sql est supprimé et n'apparaît plus dans la liste d'erreurs ou dans la production de la génération.

Remarque

La suppression d'un avertissement ne résout pas le problème sous-jacent. Les avertissements ne doivent être supprimés que si vous avez une raison valable de le faire.

Pour supprimer une erreur d'analyse de code ou un avertissement pour un fichier .sql spécifique dans un projet SQL, ajoutez un fichier StaticCodeAnalysis.SuppressMessages.xml au projet. Dans le fichier, indiquez l'ID de la règle et le fichier pour lequel l'avertissement doit être supprimé.

<?xml version="1.0" encoding="utf-8" ?>
<StaticCodeAnalysis version="2" xmlns="urn:Microsoft.Data.Tools.Schema.StaticCodeAnalysis">
  <SuppressedFile FilePath="Views/SelectStarView.sql">
    <SuppressedRule Category="Microsoft.Rules.Data" RuleId="SR0001" />
  </SuppressedFile>
</StaticCodeAnalysis>

Si le fichier n’existe pas, créez-le à la racine du projet. Si le fichier existe déjà, supprimer un avertissement supplémentaire au fichier StaticCodeAnalysis.SuppressMessages.xml existant en créant un nouvel élément <SuppressedFile><SuppressedRule /></SuppressedFile>.

Le résultat de l'analyse de code pour cette règle et ce fichier .sql est supprimé et n'apparaît plus dans la production de la génération.

Pour supprimer une erreur d'analyse de code ou un avertissement pour un fichier .sql spécifique dans l'extension SQL Database Projects, ajoutez un fichier StaticCodeAnalysis.SuppressMessages.xml au projet. Dans le fichier, indiquez l'ID de la règle et le fichier pour lequel l'avertissement doit être supprimé.

<?xml version="1.0" encoding="utf-8" ?>
<StaticCodeAnalysis version="2" xmlns="urn:Microsoft.Data.Tools.Schema.StaticCodeAnalysis">
  <SuppressedFile FilePath="Views/SelectStarView.sql">
    <SuppressedRule Category="Microsoft.Rules.Data" RuleId="SR0001" />
  </SuppressedFile>
</StaticCodeAnalysis>

Si le fichier n’existe pas, créez-le à la racine du projet. Si le fichier existe déjà, supprimer un avertissement supplémentaire au fichier StaticCodeAnalysis.SuppressMessages.xml existant en créant un nouvel élément <SuppressedFile><SuppressedRule /></SuppressedFile>.

Le résultat de l'analyse de code pour cette règle et ce fichier .sql est supprimé et n'apparaît plus dans la production de la génération.

Pour supprimer une erreur d'analyse de code ou un avertissement pour un fichier .sql spécifique dans un projet SQL, ajoutez un fichier StaticCodeAnalysis.SuppressMessages.xml au projet. Dans le fichier, indiquez l'ID de la règle et le fichier pour lequel l'avertissement doit être supprimé.

<?xml version="1.0" encoding="utf-8" ?>
<StaticCodeAnalysis version="2" xmlns="urn:Microsoft.Data.Tools.Schema.StaticCodeAnalysis">
  <SuppressedFile FilePath="Views/SelectStarView.sql">
    <SuppressedRule Category="Microsoft.Rules.Data" RuleId="SR0001" />
  </SuppressedFile>
</StaticCodeAnalysis>

Si le fichier n’existe pas, créez-le à la racine du projet. Si le fichier existe déjà, supprimer un avertissement supplémentaire au fichier StaticCodeAnalysis.SuppressMessages.xml existant en créant un nouvel élément <SuppressedFile><SuppressedRule /></SuppressedFile>.

Le résultat de l'analyse de code pour cette règle et ce fichier .sql est supprimé et n'apparaît plus dans la production de la génération.