Procédure pas à pas : analyse du code Transact-SQL d'une base de données existante

Vous pouvez améliorer la qualité du code Transact-SQL dans un schéma de base de données en l'important dans un projet de base de données et en l'analysant par rapport à un ensemble de règles. Par exemple, vous pouvez rechercher des erreurs dans un schéma que vous devez utiliser mais que vous n'avez pas développé et dont la qualité n'a pas été vérifiée. Pour plus d'informations, consultez Analyse du code de base de données pour en améliorer la qualité.

Avant de pouvoir analyser votre code de base de données, vous devez importer le schéma d'une base de données existante dans un projet de base de données. Ce projet contient du code d'un niveau de qualité inconnu. Vous souhaitez analyser le code Transact-SQL en appliquant toutes les règles disponibles pour l'analyse statique du code. Ultérieurement, vous pouvez décider de désactiver des règles pour votre équipe, mais pour cette évaluation initiale, vous devez rechercher tous les problèmes potentiels dans le code de base de données. Passez en revue les avertissements et le code qui a généré ces avertissements. Corrigez un avertissement, supprimez d'autres avertissements, puis réanalysez le projet de base de données.

Composants requis

Avant de pouvoir terminer cette procédure pas à pas, vous devez exécuter la Procédure pas à pas : placement d'un schéma de base de données existant sous contrôle de version. Dans cette procédure pas à pas, vous allez créer une solution qui contient un projet de base de données nommé MyAdvWorks.

Pour configurer les règles d'analyse de votre projet de base de données

  1. Dans Visual Studio, ouvrez la solution MyAdvWorks.

  2. Dans Vue Schéma, développez le nœud du projet de base de données, si ce n'est pas déjà le cas.

  3. Dans le menu Données, pointez sur Analyse statique du code, puis cliquez sur Configurer.

    Les propriétés d'analyse du code de votre projet de base de données apparaissent.

  4. Dans la liste Règles, développez les nœuds Design, Affectation de nom et Performances pour afficher toutes les règles disponibles pour l'analyse du code Transact-SQL.

  5. Vérifiez que les cases à cocher de toutes les règles sont activées.

    Vous pouvez activer ou désactiver la case à cocher d'une catégorie de règles, telles que Design, pour activer ou désactiver les cases à cocher de chaque règle de cette catégorie.

    Notes

    Vous pouvez traiter une règle en tant qu'erreur plutôt qu'en tant qu'avertissement en activant la case à cocher Traiter l'avertissement comme erreur de cette règle.

  6. Dans le menu Fichier, cliquez sur Enregistrer tout.

    Ensuite, analysez le code Transact-SQL de votre projet de base de données. Dans cette procédure pas à pas, vous allez démarrer l'analyse manuellement, mais vous pouvez la configurer de manière à ce qu'elle démarre après chaque génération réussie de votre projet de base de données. Pour plus d'informations, consultez Comment : activer et désactiver l'analyse statique du code d'une base de données.

Pour analyser votre projet de base de données

  • Dans le menu Données, pointez sur Analyse statique du code, puis cliquez sur Exécuter.

    Le code Transact-SQL de votre projet de base de données est analysé, et les avertissements s'affichent dans la Liste d'erreurs. Si la Liste d'erreurs n'apparaît pas, ouvrez le menu Affichage, puis cliquez sur Liste d'erreurs.

    Ensuite, vous allez afficher et corriger l'un des avertissements.

Pour afficher et corriger un avertissement

  1. Dans la Liste d'erreurs, recherchez l'avertissement suivant :

    SR0014 : Microsoft.Rules.Data: Une perte de données peut se produire lors du cast de ASCII String(1) en SmallInt.

    Le code à l'origine de cet avertissement se trouve dans le fichier nommé « ufnGetStock.function.sql ». Vous pouvez trouver ce code à la ligne 12, colonne 30.

  2. Cliquez avec le bouton droit sur l'avertissement dans la Liste d'erreurs, puis cliquez sur Afficher l'aide sur l'erreur.

    La rubrique d'aide de la règle SR0014 apparaît. Vous pouvez découvrir ce qui a déclenché la règle, comment résoudre l'avertissement, et dans quelles circonstances vous pouvez ignorer l'avertissement. Vous pouvez également consulter un exemple de code Transact-SQL qui pourrait provoquer cet avertissement et les mises à jour de ce code qui pourraient résoudre l'avertissement.

  3. Dans la Liste d'erreurs, double-cliquez sur l'avertissement ou mettez-le en surbrillance et appuyez sur ENTRÉE.

    L'éditeur de Transact-SQL s'ouvre et affiche le code qui a provoqué l'avertissement. Le curseur apparaît au début du code à l'origine de l'avertissement. Dans ce cas, le curseur s'affiche dans la clause FROM parce que la colonne des entiers, LocationID, est comparée avec une constante à caractère unique, « 6 ». Le code suivant s'affiche :

    CREATE FUNCTION [dbo].[ufnGetStock](@ProductID [int])
    RETURNS [int] 
    AS 
    -- Returns the stock level for the product. This function is used internally only
    BEGIN
        DECLARE @ret int;
    
        SELECT @ret = SUM(p.[Quantity]) 
        FROM [Production].[ProductInventory] p 
        WHERE p.[ProductID] = @ProductID 
            AND p.[LocationID] = '6'; -- Only look at inventory in the misc storage
    
        IF (@ret IS NULL) 
            SET @ret = 0
    
        RETURN @ret
    END;
    
    GO
    EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'Scalar function returning the quantity of inventory in LocationID 6 (Miscellaneous Storage)for a specified ProductID.', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'FUNCTION', @level1name = N'ufnGetStock';
    
    
    GO
    EXECUTE sp_addextendedproperty @name = N'MS_Description', @value = N'Input parameter for the scalar function ufnGetStock. Enter a valid ProductID from the Production.ProductInventory table.', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'FUNCTION', @level1name = N'ufnGetStock', @level2type = N'PARAMETER', @level2name = N'@ProductID';
    
  4. Mettez à jour le code pour que l'instruction SELECT corresponde à l'exemple suivant :

        SELECT @ret = SUM(p.[Quantity]) 
        FROM [Production].[ProductInventory] p 
        WHERE p.[ProductID] = @ProductID 
            AND p.[LocationID] = 6; -- Only look at inventory in the misc storage
    
  5. Dans le menu Fichier, cliquez sur Enregistrer ufnGetStock.function.sql.

    Ensuite, vous allez passer en revue et supprimer un deuxième avertissement.

Pour afficher et supprimer un avertissement d'analyse du code

  1. Dans la Liste d'erreurs, recherchez l'avertissement suivant :

    SR0011 : Microsoft.Rules.Data: Object name(Database Version) contains special characters.

    Le code à l'origine de cet avertissement se trouve dans le fichier nommé « AWBuildVersion.table.sql ». Vous pouvez trouver ce code à la ligne 3, colonne 5.

    À ce stade, vous devez décider s'il faut supprimer les caractères spéciaux du nom de l'objet. En utilisant la refactorisation de base de données, vous pouvez automatiser la mise à jour de toutes les références à cet objet afin qu'elles contiennent le nom correct. Toutefois, vous arrêterez toutes les applications qui dépendent de l'ancien nom. Si vous ne disposez pas de suffisamment d'informations pour choisir la meilleure approche, vous pouvez supprimer l'avertissement jusqu'à ce que vous ayez étudié les ramifications de la modification. Vous pouvez également créer un élément de travail dans Visual Studio Team Foundation Server pour suivre cette tâche ou même l'assigner à quelqu'un d'autre.

  2. Dans la Liste d'erreurs, cliquez sur le titre de la colonne Description.

    La Liste d'erreurs trie les avertissements en fonction de leur description, en regroupant tous les avertissements SR0011.

  3. Faites défiler la Liste d'erreurs jusqu'à l'avertissement SR0011, puis mettez-le en surbrillance.

    Pour ignorer plusieurs avertissements, vous pouvez mettre en surbrillance une liste contiguë d'avertissements en cliquant sur le premier avertissement de la liste, puis en appuyant sur la touche MAJ tout en cliquant sur le dernier avertissement de la liste.

    Notes

    Vous pouvez créer un élément de travail à partir de cette liste en cliquant avec le bouton droit sur une ligne mise en surbrillance, en pointant sur Créer un élément de travail, puis en cliquant sur un type d'élément de travail. Si vous supprimez l'avertissement jusqu'à ce que le nom puisse être modifié, vous devez inclure une instruction dans l'élément de travail permettant de rétablir l'avertissement une fois le nom modifié. Pour écourter cette procédure pas à pas, vous allez ignorer la création des éléments de travail.

  4. Cliquez avec le bouton droit sur une ligne mise en surbrillance et cliquez sur Supprimer les messages d'analyse statique du code.

    Un fichier nommé StaticCodeAnalysis.SuppressMessages.xml est ajouté à votre projet de base de données. Le fichier MyAdvWorks.dbproj est extrait du contrôle de version. Les avertissements supprimés disparaissent de la Liste d'erreurs, ce qui réduit le nombre d'avertissements affichés dans la liste.

    Notes

    En supprimant un avertissement pour un fichier de votre projet de base de données, vous supprimez toutes les instances de cet avertissement pour ce fichier.

    Le fichier XML contient la liste des avertissements supprimés. Vous pouvez supprimer ce fichier si vous souhaitez rétablir tous les avertissements supprimés. Pour plus d'informations, consultez Comment : arrêter la suppression des avertissements pour l'analyse du code d'une base de données.

    Dans la dernière procédure, vous allez réanalyser le projet de base de données.

Pour réanalyser votre projet de base de données

  • Dans le menu Données, pointez sur Analyse statique du code, puis cliquez sur Exécuter.

    Le code Transact-SQL de votre projet de base de données est réanalysé et le reste des avertissements s'affiche dans la Liste d'erreurs. Les avertissements que vous avez corrigés ou supprimés n'apparaissent pas.

Étapes suivantes

Dans un environnement typique, vous devez analyser chaque avertissement affiché dans la Liste d'erreurs. Vous devez ensuite corriger les problèmes que vous pouvez résoudre immédiatement, supprimer les problèmes qui peuvent être ignorés et créer des éléments de travail pour les problèmes qui devront être résolus ultérieurement. Pour certains problèmes, vous pouvez utiliser la refactorisation de base de données afin de supprimer les avertissements. Pour plus d'informations sur la refactorisation de base de données, consultez Refactoriser le code et les données d'une base de données.

Après avoir résolu ou supprimé chaque avertissement, il est conseillé d'exécuter vos tests unitaires de base de données et vos tests d'application pour vérifier que les modifications n'ont pas généré de nouveaux problèmes. Pour plus d'informations sur les tests unitaires de base de données, consultez Vérification du code de base de données à l'aide de tests unitaires.

Voir aussi

Concepts

Analyse du code de base de données pour en améliorer la qualité