Partager via


Analyse du code SQL pour améliorer la qualité du code

S’applique à : SQL Server Azure SQL Database Azure SQL Managed Instance Base de données SQL dans Microsoft Fabric

L'analyse du code de votre base de données vous permet d'éliminer les problèmes potentiels de conception et de dénomination et d'éviter les écueils en matière de performances. Les concepts sont très similaires à ceux de l'analyse statique visant à détecter et à corriger les défauts dans le code managé. Vous configurez les règles d'analyse que vous souhaitez appliquer au code de votre base de données, analysez le code, puis corrigez ou ignorez les problèmes que vous avez identifiés. Avant de pouvoir analyser le code de votre base de données, vous devez d'abord importer votre schéma de base de données dans un projet de base de données. Pour plus d'informations, voir Débuter à partir d'une base de données existante.

En effectuant une analyse statique à l'aide des règles fournies, vous pouvez identifier les problèmes qui s'inscrivent dans les catégories suivantes :

  • Problèmes de conception T-SQL Les problèmes de conception comprennent le code qui pourrait ne pas se comporter comme vous l'attendez, la syntaxe déconseillée et les problèmes qui pourraient survenir lorsque la conception de votre base de données est modifiée.

  • Problèmes de dénomination T-SQL Les problèmes de dénomination surviennent lorsque le nom d'un objet de base de données risque de provoquer des problèmes inattendus ou de violer les conventions généralement acceptées.

  • Problèmes de performance T-SQL Les problèmes de performance comprennent le code qui peut réduire sensiblement la vitesse à laquelle les opérations de la base de données sont terminées. La plupart de ces problèmes identifient un code qui provoquera une analyse de table lors de son exécution.

    Capture d'écran des paramètres du projet SQL Server Data Tools pour les règles d'analyse de code.

Les règles d’analyse du code sont extensibles. Vous pouvez créer vos règles pour faire respecter vos normes de codage. Pour plus d'informations, consultez Vue d'ensemble de l'extensibilité des règles d'analyse de code.

Exemple et syntaxe de fichier projet SQL

Un fichier projet SQL peut contenir deux propriétés : RunSqlCodeAnalysis et SqlCodeAnalysisRules. L'élément RunSqlCodeAnalysis indique si l'analyse de code est exécutée lors de la génération du projet. Par défaut, toutes les règles incluses sont exécutées et la détection d'un modèle de règle déclenche un avertissement de génération.

<?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>
  </PropertyGroup>
...

L'élément SqlCodeAnalysisRules spécifie les règles et leur comportement en cas d'erreur ou d'avertissement. Dans l'exemple suivant, les règles Microsoft.Rules.Data.SR0006 et Microsoft.Rules.Data.SR0007 sont désactivées et la détection de la règle Microsoft.Rules.Data.SR0008 entraînera une erreur de construction.

<?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>
...

Un fichier StaticCodeAnalysis.SuppressMessages.xml peut être ajouté au projet pour supprimer des résultats d'analyse de code spécifiques. L'exemple suivant supprime l'avertissement SR0001 pour la procédure stockée dans le fichier StoredProcedures/uspGetEmployeeManagers.sql.

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

Règles fournies

Problèmes de conception T-SQL

Lorsque vous analysez le code T-SQL de votre projet de base de données, un ou plusieurs avertissements peuvent être classés comme des problèmes de conception. Vous devez résoudre les problèmes de conception pour éviter les situations suivantes :

  • Les modifications ultérieures apportées à votre base de données risquent de compromettre les applications qui en dépendent.
  • Le code peut ne pas produire le résultat attendu.
  • Le code risque de ne pas fonctionner si vous l'exécutez avec des versions ultérieures de SQL Server.

En général, vous ne devez pas supprimer un problème de conception parce qu'il risque de compromettre votre application, aujourd'hui ou à l'avenir.

Les règles fournies identifient les problèmes de conception suivants :

Problèmes de dénomination T-SQL

Lorsque vous analysez le code T-SQL de votre projet de base de données, un ou plusieurs avertissements peuvent être classés comme des problèmes de dénomination. Vous devez résoudre les problèmes de dénomination pour éviter les situations suivantes :

  • Le nom que vous avez spécifié pour un objet peut entrer en conflit avec le nom d'un objet système.
  • Le nom que vous avez spécifié devra toujours être entouré de caractères d'échappement (dans SQL Server, « [ » et « ] »).
  • Le nom que vous avez spécifié peut prêter à confusion pour les personnes qui essaient de lire et de comprendre votre code.
  • Le code risque de ne pas fonctionner si vous l'exécutez avec des versions ultérieures de SQL Server.

En général, vous pouvez supprimer un problème de dénomination si d'autres applications que vous ne pouvez pas modifier dépendent du nom actuel.

Les règles fournies identifient les problèmes de conception suivants :

Problèmes de performances T-SQL

Lorsque vous analysez le code T-SQL de votre projet de base de données, un ou plusieurs avertissements peuvent être classés comme des problèmes de performance. Vous devez résoudre les problèmes de performance afin d'éviter la situation suivante :

  • Une analyse de table se produit lorsque le code est exécuté.

En général, vous pouvez supprimer un problème de performance si la table contient si peu de données qu'une analyse n'entraînera pas de baisse significative des performances.

Les règles fournies identifient les problèmes de conception suivants :

Activer et désactiver l'analyse de code

Pour activer ou désactiver 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, sélectionnez les paramètres d'analyse du code souhaités.

Pour désactiver ou activer une règle spécifique, sélectionnez-la 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.

Pour activer ou désactiver Code Analysis SQL dans les projets SQL de style SDK (préversion), modifiez le fichier .sqlproj directement. Ouvrez le fichier .sqlproj dans l’affichage de l’Explorateur de solutions en double-cliquant sur le projet.

Dans l'éditeur de texte, ajoutez un élément <RunSqlCodeAnalysis>True</RunSqlCodeAnalysis> au premier bloc <PropertyGroup> pour permettre l'analyse du code. Pour désactiver l'analyse du code, remplacez la valeur de l'élément RunSqlCodeAnalysis par True ou False ou supprimez complètement l'élément.

Pour activer ou désactiver 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 désactiver l'analyse du code, remplacez la valeur de l'élément RunSqlCodeAnalysis par True ou False ou supprimez complètement l'élément.

Pour remplacer les paramètres d'analyse du code dans le fichier projet, vous pouvez utiliser les propriétés /p:RunSqlCodeAnalysis et /p:SqlCodeAnalysisRules avec la commande dotnet build. Par exemple, pour générer avec l'analyse de code désactivée :

dotnet build /p:RunSqlCodeAnalysis=False

Pour générer avec des paramètres spécifiques des règles d'analyse du code SQL :

dotnet build /p:RunSqlCodeAnalysis=True /p:SqlCodeAnalysisRules="+!Microsoft.Rules.Data.SR0001;+!Microsoft.Rules.Data.SR0008"