SQL Server Data Tools (SSDT) propose un utilitaire appelé Schema Compare que vous pouvez utiliser pour comparer deux définitions de bases de données. La source et la cible de la comparaison peuvent être n’importe quelle combinaison de bases de données connectées, de projets de bases de données SQL Server ou de fichiers .dacpac. Les résultats de la comparaison s’affichent sous la forme d’un ensemble d’actions à prendre avec la cible pour la rendre identique à la source. Une fois la comparaison terminée, vous pouvez mettre à jour directement la cible (si la cible est un projet ou une base de données) ou générer un script de mise à jour ayant le même effet.
Les différences entre la source et la cible apparaissent dans une grille pour faciliter l’examen. Vous pouvez explorer et examiner chaque différence dans la grille des résultats ou sous forme de script. Vous pouvez ensuite exclure sélectivement des différences spécifiques.
Vous pouvez enregistrer les comparaisons soit comme partie d’un projet de base de données SQL Server, soit en tant que fichier autonome. Vous pouvez également définir des options qui contrôlent la portée de la comparaison et les aspects de la mise à jour. Ensuite, vous pouvez enregistrer la comparaison afin de pouvoir facilement répéter la même comparaison ultérieurement ou l’utiliser comme point de départ pour une nouvelle comparaison.
La procédure suivante compare le schéma d’un projet de base de données avec une base de données connectée. Elle utilise des entités créées lors de procédures précédentes dans les sections Développement de bases de données connectées et Développement hors ligne orienté projet.
Comparer les définitions de bases de données
Dans le menu Outils, sélectionnez SQL Server, puis sélectionnez Nouvelle comparaison de schéma.
- Ou bien, faites un clic droit sur le projet TradeDev dans l’Explorateur de solutions, puis sélectionnez Comparer les schémas.
- La fenêtre Comparer les schémas s’ouvre et Visual Studio lui attribue automatiquement un nom, tel que SqlSchemaCompare1.
- Deux menus déroulants avec une flèche verte entre eux apparaissent juste en 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 bases de données pour votre source et votre cible de comparaison.
Dans le menu déroulant Sélectionner la source, choisissez Sélectionner la source et la boîte de dialogue Sélectionner la source de schéma s’ouvre.
- Si vous avez ouvert la fenêtre Comparer les schémas en faisant un clic droit sur le nom du projet, le schéma source est déjà renseigné et vous pouvez passer à l’étape 4.
Sélectionnez le bouton radio Projet, puis sélectionnez le projet de base de données TradeDev que vous avez créé lors de la procédure précédente.
Dans le menu déroulant Sélectionner la cible de la fenêtre Comparer les schémas, choisissez Sélectionner la cible, puis la boîte de dialogue Sélectionner le schéma cible s’ouvre. Dans la section Schéma, sélectionnez le bouton radio Base de données, puis sélectionnez le bouton Nouvelle connexion.
Dans la boîte de dialogue Propriétés de la connexion, saisissez le nom du serveur où se trouve la base de données TradeDev et assurez-vous de fournir les informations d’identification correctes. Ensuite, sélectionnez TradeDev dans Se connecter à une base de données et sélectionnez OK.
- Vous pouvez également 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.
Sélectionnez le bouton Comparer dans la barre d’outils de la fenêtre Comparer les schémas pour démarrer le processus de comparaison.
- Lorsque la comparaison est terminée, les différences de structure entre le projet et la base de données apparaissent dans le volet 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 (suppression, modification ou ajout par exemple). Le volet Résultats affiche une ligne pour chaque objet de base de données qui diffère entre les définitions de bases 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 le rendre 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 apparaît en caractères gras pour mettre en évidence la différence.
- Par défaut, la liste des résultats masque les objets identiques dans les deux schémas ou ceux qui ne sont pas pris en charge pour une mise à jour (par exemple, les objets intégrés). Vous pouvez sélectionner les boutons de filtre appropriés dans la barre d’outils pour afficher ces objets.
- Pour modifier les préférences de regroupement, sélectionnez la liste déroulante Regrouper les résultats dans la barre d’outils. Sélectionnez Type pour regrouper les résultats par type d’objet (par exemple, par tables, vues ou procédures stockées).
Trouvez la table Products dans le groupe Tables. Sélectionnez la ligne et les définitions source et cible de la table apparaissent dans le volet Définitions d’objet avec les différences mises en évidence. Vous pouvez également développer la ligne de la table Products dans le volet Résultats pour inspecter les éléments spécifiques de la table qui diffèrent.
Par défaut, toutes les différences sont incluses dans la portée de l’action Mettre à jour la cible. Vous pouvez exclure les différences que vous ne souhaitez pas synchroniser. Pour ce faire, décochez la colonne Action au centre de chaque ligne. Vous pouvez également faire un clic droit sur une ligne dans le volet du schéma et sélectionner Exclure. La ligne est immédiatement grisée. Lorsqu’il est temps de mettre à jour la base de données cible, cette ligne ne sera pas prise en compte pour les modifications en attente.
- Vous pouvez également faire un clic droit sur une ligne de groupe et sélectionner Tout exclure ou Tout inclure, ce qui équivaut à décocher ou cocher toutes les différences de ce groupe. Lorsque vous regroupez les résultats par schéma, c’est une manière utile d’inclure ou d’exclure toutes les modifications d’un schéma spécifique.
- Si la ligne exclue a des objets dépendants (par exemple, une ligne Table référencée par une ligne Vue), la ligne exclue est désactivée mais sa case à cocher n’est pas désélectionnée. Lorsque toutes les lignes qui en dépendent sont décochées, la ligne désactivée sera décochée. De plus, si une ligne est refactorisée (renommée ou déplacée vers un autre schéma), alors la case à cocher est désactivée pour cette ligne et pour toute ligne enfant dépendante.
Si vous utilisez des variables SQLCMD, l’outil Schema Compare utilise les valeurs locales dans les propriétés de votre projet et les valeurs par défaut sont ignorées.
Pour mettre à jour le schéma de la cible, vous avez deux options. Vous pouvez mettre à jour directement la cible depuis la fenêtre Comparer les schémas si la cible est une base de données ou un projet, ou vous pouvez 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 options plus en détail.
Comparer les schémas avec le modèle d’automatisation de Visual Studio
Ouvrez le menu Affichage, pointez sur Autres fenêtres, puis sélectionnez Fenêtre de commandes.
Dans la fenêtre de commandes, tapez la commande suivante:
Tools.SSDTNewSchemaComparison
Mise à jour directement depuis la fenêtre Comparer les schémas
Sélectionnez le bouton Mettre à jour dans la barre d’outils de la fenêtre Comparer les schémas.
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 remettre le script à un DBA pour le déploiement ultérieur.
Si vous avez les permissions 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 de modification pour exécuter le script.
Mise à jour par script
Sélectionnez le bouton Générer le 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.
Examinez le script de modification généré. Vous pouvez enregistrer le script à l’aide de la commande 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, vous pouvez remettre le script à un DBA pour le déploiement ultérieur.
- Alternativement, vous pouvez connecter l’Éditeur Transact-SQL à un serveur approprié et exécuter le script directement. Avant d’effectuer cette procédure, vous devez avoir les permissions nécessaires pour créer ou mettre à jour la base de données. Si vous avez les permissions 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 de modification pour exécuter le script.
Sélectionnez le bouton Connecter. Cette action se connecte soit au serveur actuel, soit 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.
Examinez le script et faites, le cas échéant, les modifications nécessaires aux variables de commande qui définissent le nom de la base de données cible et le préfixe associé, ainsi que les chemins d’accès aux fichiers.
Sélectionnez le bouton Exécuter dans la barre d’outils du volet de modification pour exécuter le script.
Voir aussi
- Rapport de dérive SqlPackage
- Extension Azure Data Studio Schema Compare
- Classe SqlSchemaCompareTask