Partager via


Procédure : Utiliser Comparer les schémas pour comparer différentes définitions de base de données

SQL Server Data Tools (SSDT) inclut un utilitaire de comparaison de schémas que vous pouvez utiliser pour comparer deux définitions de base de données. La source et la cible de la comparaison peuvent être n'importe quelle combinaison des éléments suivants : base de données connectée, projet de base de données SQL Server, instantané ou fichier .dacpac. Les résultats de la comparaison s'affichent en tant qu'ensemble d'actions qui doivent être effectuées sur la cible de façon à ce qu'elle soit identique à la source. Une fois la comparaison effectuée, vous pouvez mettre à jour la cible directement (s’il s’agit d’un projet ou d’une base de données) ou générer un script de mise à jour qui a le même effet.

Les différences entre la source et la cible s'affichent dans une grille qui permet de les examiner facilement. Vous pouvez extraire et passer en revue chaque différence dans la grille de résultats ou sous la forme d'un script. Vous pouvez ensuite exclure des différences spécifiques de manière sélective.

Vous pouvez enregistrer les comparaisons dans le cadre d'un projet de base de données SQL Server ou en tant que fichier autonome. Vous pouvez également définir des options qui contrôlent l'étendue de la comparaison et les aspects de la mise à jour. Vous pouvez ensuite enregistrer la comparaison afin de pouvoir la réutiliser ultérieurement ou l'utiliser comme point de départ d'une nouvelle comparaison.

Avertissement

Si un projet est spécifié en tant que cible pour la comparaison, la longueur maximale de chemin d'accès prise en charge (à l'exception de la lettre du lecteur, du signe deux-points et de la barre oblique inverse au début) pour le projet est de 256 caractères. Si le chemin d'accès de votre projet dépasse 256 caractères, vous serez toujours en mesure de comparer son schéma à une base de données ou à un autre projet. Toutefois, vous ne serez pas en mesure de mettre à jour son schéma.

Dans la procédure suivante, vous comparez le schéma d'un projet de base de données à une base de données connectée. Il utilise les entités créées dans les procédures précédentes des sections Gestion des tables et des relations et correction des erreurs et Développement de base de données hors connexion orientée projet.

Comparer des définitions de base de données

  1. Dans le menu Outils, sélectionnez SQL Server, puis sélectionnez Nouvelle comparaison de schémas.

    Dans l'Explorateur de solutions vous pouvez aussi cliquer avec le bouton droit sur le projet TradeDev, puis sélectionner Comparaison de schémas.

    La fenêtre Comparaison de schémas s'ouvre et Visual Studio lui assigne automatiquement un nom, tel que SqlSchemaCompare1.

    Deux menus déroulants séparés par une flèche verte s’affichent juste au-dessous de la barre d’outils de la fenêtre Comparer les schémas. Ces menus vous permettent de sélectionner les définitions de base de données pour vos source et cible de comparaison.

  2. Dans le menu déroulant Sélectionner une source, sélectionnez Sélectionner une source. La boîte de dialogue Sélectionner le schéma source s’ouvre.

    Si vous avez ouvert la fenêtre Comparer les schémas en cliquant avec le bouton droit sur le nom du projet, le schéma source est déjà renseigné et vous pouvez passer à l'étape 4.

  3. Sélectionnez la case d'option Projet, puis sélectionnez le projet de base de données TradeDev que vous avez créé au cours de la procédure précédente.

  4. Dans le menu déroulant Sélectionner une cible de la fenêtre Comparer les schémas, choisissez Sélectionner une cible. La boîte de dialogue Sélectionner le schéma cible s’ouvre. Dans la section Schéma, sélectionnez la case d’option Base de données, puis sélectionnez le bouton Nouvelle connexion.

  5. Dans la boîte de dialogue Propriétés de connexion, entrez le nom du serveur sur lequel la base de données TradeDev réside et assurez-vous que les informations d'identification fournies sont correctes. Ensuite, sélectionnez TradeDev dans Connexion à une base de données et sélectionnez OK.

    Vous pouvez aussi sélectionner le bouton Options dans la barre d’outils de la fenêtre Comparer les schémas pour spécifier les objets à comparer, les types de différences à ignorer et d’autres paramètres.

  6. Sélectionnez le bouton Comparer dans la barre d’outils de la fenêtre Comparer les schémas pour démarrer la comparaison.

    Lorsque la comparaison est terminée, les différences structurelles entre le projet et la base de données apparaissent dans le volet de résultats dans la partie supérieure de la fenêtre. Par défaut, les résultats de la comparaison regroupent toutes les différences par action (notamment, Supprimer, Modifier ou Ajouter). Le volet de résultats affiche une ligne pour chaque objet de base de données qui diffère dans les définitions de base de données. Chaque ligne identifie l'objet dans le schéma source ou cible (ou les deux) et l'action qui sera effectuée sur le schéma cible pour que l'objet cible soit identique à l'objet source. Si un objet a été refactorisé et renommé ou déplacé vers un nouveau schéma, les noms source et cible sont différents, et le nom source s’affiche dans une police en gras pour mettre en évidence la différence.

    Par défaut, la liste de résultats masque les objets qui sont identiques dans les deux schémas ou qui ne sont pas pris en charge pour la mise à jour (par exemple, les objets intégrés). Vous pouvez sélectionner les boutons de filtre dans la barre d’outils pour afficher ces objets.

    Pour modifier la préférence de regroupement, sélectionnez la liste déroulante Grouper les résultats dans la barre d’outils. Sélectionnez Type pour regrouper les résultats par type d'objet (par exemple, tables, affichages ou procédures stockées).

  7. Recherchez la table Products dans le groupe Tables. Sélectionnez la ligne. Les définitions source et cible de la table s’affichent alors dans le volet Définitions d’objet où les différences sont mises en évidence. Vous pouvez aussi développer la ligne de la table Products dans le volet de résultats pour examiner des éléments spécifiques de la table qui sont différents.

  8. Par défaut, toutes les différences sont incluses dans l'étendue de l'action Mettre à jour la cible. Vous pouvez exclure les différences que vous ne souhaitez pas synchroniser. Pour cela, désélectionnez la colonne Action au centre de chaque ligne. Vous pouvez aussi cliquer avec le bouton droit sur une ligne dans le volet de schéma et sélectionner Exclure. La ligne est immédiatement grisée. Au moment de la mise à jour de la base de données cible, cette ligne n’est pas prise en compte pour les modifications en attente.

    Vous pouvez aussi cliquer avec le bouton droit sur une ligne de groupe et sélectionner Exclure tout ou Inclure tout, ce qui revient à désactiver ou activer toutes les différences dans ce groupe. Le regroupement des résultats par schéma s'avère utile pour inclure ou exclure toutes les modifications apportées à un schéma spécifique.

    • Si la ligne exclue possède des objets dépendants (par exemple, une ligne de table référencée par une ligne d'affichage), cette ligne est désactivée, mais pas sa case à cocher. Une fois toutes les lignes dépendantes de cette ligne désactivées, la ligne désactivée est désactivée. En outre, si une ligne est refactorisée (renommée ou déplacée vers un autre schéma), la case à cocher est désactivée pour cette ligne et ses lignes enfants dépendantes.

      Si vous actualisez la comparaison, les différences que vous avez choisies d’exclure sont ignorées.

    • Si vous utilisez des variables SQLCMD, l’outil Comparer les schémas utilise les valeurs locales dans les propriétés de votre projet, et les valeurs par défaut sont ignorées. Pour plus d’informations, consultez Paramètres du projet de base de données.

Pour mettre à jour le schéma de la cible, vous avez deux options. Vous pouvez mettre à jour la cible directement à partir de la fenêtre Comparaison de schémas si la cible est une base de données ou un projet, ou générer un script de mise à jour si la cible est une base de données ou un fichier de base de données. Un script généré apparaît dans l’Éditeur Transact-SQL, à partir duquel vous pouvez inspecter le script et l’exécuter sur une base de données. Les procédures suivantes décrivent ces étapes en détail.

Avertissement

La mise à jour échoue, car la modification implique le changement d'une colonne NOT NULL en colonne NULL et provoque une perte de données. Si vous souhaitez faire la mise à jour, sélectionnez le bouton Options (le cinquième à partir de la gauche) dans la barre d’outils de la fenêtre Comparer les schémas et désélectionnez l’option Bloquer le déploiement incrémentiel en cas de perte de données.

Comparer des schémas avec le modèle d’automation Visual Studio

  1. Ouvrez le menu Affichage, pointez sur Autres fenêtres, puis sélectionnez Fenêtre Commande.

  2. Dans la fenêtre Commande, tapez la commande suivante :

    Tools.SSDTNewSchemaComparison
    

Mettre à jour directement dans la fenêtre Comparer les schémas

  1. Sélectionnez le bouton Mettre à jour dans la barre d’outils de la fenêtre Comparer les schémas.

  2. Examinez le script de modification généré. Vous pouvez enregistrer le script à l'aide du menu Fichier/Nouveau. Cela peut être pratique dans les situations où vous n’êtes pas autorisé à mettre à jour une base de données de production, auquel cas vous pouvez donner le script à un administrateur de base de données en vue d'un déploiement ultérieur.

  3. Si vous avez les autorisations nécessaires pour mettre à jour la base de données, sélectionnez le bouton Exécuter la requête dans la barre d’outils du volet d’édition pour exécuter le script.

Mettre à jour à l’aide d’un script

  1. Sélectionnez le bouton Générer un script (le quatrième à partir de la gauche) dans la barre d’outils de la fenêtre Comparer les schémas.

    Le script généré apparaît dans une nouvelle fenêtre de l’Éditeur Transact-SQL.

    Avertissement

    Seuls les fichiers .dacpac générés par le processus de capture instantanée SSDT prennent en charge ce comportement. Vous ne pouvez pas cibler un fichier .dacpac qui a été généré par le framework ou les outils SQL Data-tier Application (DAC).

  2. Examinez le script de modification généré. Vous pouvez enregistrer le script avec la commande de menu Fichier/Enregistrer ou Fichier/Enregistrer sous.

    Un script enregistré peut être pratique dans les situations où vous n’êtes pas autorisé à mettre à jour une base de données de production. Dans ces cas de figure, vous pouvez donner le script à un administrateur de base de données en vue d’un déploiement ultérieur.

    Vous pouvez aussi connecter l’Éditeur Transact-SQL à un serveur approprié et exécuter le script directement. Avant de commencer cette procédure, vous devez avoir les autorisations nécessaires pour créer ou mettre à jour la base de données. Si vous avez les autorisations nécessaires pour mettre à jour la base de données, sélectionnez le bouton Exécuter la requête dans la barre d’outils du volet d’édition pour exécuter le script.

  3. Sélectionnez le bouton Connexion. Cette action établit une connexion au serveur actuel ou bien vous invite à entrer ou sélectionner un serveur dans la boîte de dialogue Se connecter au serveur. Le nom de la base de données est défini dans le script en tant que variable de commande.

  4. Inspectez le script et, si nécessaire, apportez des modifications aux variables de commande qui définissent le nom de la base de données cible, le préfixe associé et les chemins d'accès de fichier.

  5. Sélectionnez le bouton Exécuter dans la barre d’outils du volet d’édition pour exécuter le script.

Voir aussi