Partager via


Procédure pas à pas : comparaison des schémas d'une base de données et d'un projet de base de données

Cette rubrique s'applique à :

Visual Studio Ultimate

Visual Studio Premium

Visual Studio Professional 

Visual Studio Express

La rubrique s'applique La rubrique s'applique La rubrique ne s'applique pas La rubrique ne s'applique pas

Dans cette procédure pas à pas, vous comparez le schéma d'un projet de base de données à celui d'une base de données à l'aide de Visual Studio. En fonction de l'utilisation que fait votre équipe du projet de base de données et de la base de données, il se peut que vous souhaitiez ensuite copier les modifications du schéma dans un sens ou dans l'autre. Vous pouvez rencontrer les scénarios classiques suivants à mesure que votre équipe progresse au sein du cycle de vie du développement de base de données :

  • Le projet est la source et la base de données est la cible. Vous pouvez utiliser un projet de base de données pour développer ou gérer une base de données. Après avoir apporté des modifications au schéma du projet, vous les copiez dans la base de données qui est hébergée sur un serveur intermédiaire. Ultérieurement, votre équipe pourrait déployer la base de données vers un serveur de production.

    La comparaison que vous effectuez dans cette procédure pas à pas génère un script de langage de définition de données (DDL) à partir des différences de schéma. Vous pouvez ensuite utiliser ce script pour appliquer l'ensemble ou une partie du projet de base de données à la base de données. Pour plus d'informations, consultez Propager les modifications du projet vers la base de données.

  • La base de données est la source et le projet est la cible. Une erreur peut se produire dans le schéma d'une base de données de production, ou le schéma peut devenir obsolète et nécessiter une mise à jour. Cette découverte peut exiger de votre équipe qu'elle applique une mise à jour urgente à la base de données. Pour préserver la synchronisation du projet avec la base de données, vous pouvez importer ensuite la mise à jour dans un projet de base de données. Pour plus d'informations, consultez Comment : importer des mises à jour d'une base de données vers le projet de base de données.

Cette procédure pas à pas décrit les tâches suivantes :

Phase d'installation

  1. Créer un projet de base de données. Le nouveau projet commence en étant vide.

  2. Importer un schéma de base de données à partir d'un script.

  3. Configurer, générer et déployer le projet de base de données sur votre serveur de base de données. La base de données et le projet possèdent des schémas identiques.

Phase de production

  1. Ajouter une table au projet de base de données. Vous ajoutez une table de trois colonnes appelée InternationalShippers.

  2. Comparer les deux schémas. Dans cette comparaison, vous désignez le projet de base de données comme la source et la base de données comme la cible. Par conséquent, les résultats affichent la table InternationalShippers en tant que nouvelle table du projet de base de données.

  3. Propager les modifications du projet vers la base de données. Vous pouvez propager la nouvelle table InternationalShippers entre le projet de base de données et la base de données déployée. Si vous avez suivi cette procédure, vous pouvez remplacer des parties de l'exemple de base de données.

    Notes

    Vous pouvez également propager des modifications entre une base de données et un projet de base de données. Pour plus d'informations, consultez Comment : importer des mises à jour d'une base de données vers le projet de base de données.

Composants requis

Pour effectuer cette procédure pas à pas, vous avez besoin des applications et autorisations suivantes :

  • SQL Server 2008

  • Autorisations pour créer et mettre à jour des bases de données sur le serveur de base de données cible

  • Visual Studio Premium ou Visual Studio Ultimate

Phase d'installation

Créer un projet de base de données

Pour créer un projet de base de données

  1. Dans le menu Fichier, pointez sur Nouveau, puis cliquez sur Fichier.

    La boîte de dialogue Nouveau projet s'affiche.

  2. Sous Modèles installés, développez le nœud Base de données, puis cliquez sur SQL Server.

  3. Dans la liste des modèles, cliquez sur Projet de base de données SQL Server 2008.

  4. Dans Nom, tapez CompareProject et cliquez sur OK.

    Le projet CompareProject, qui est vide, s'ouvre et apparaît dans l'Explorateur de solutions.

Importer un schéma de base de données à partir d'un script

Pour créer un script duquel vous pouvez importer un schéma

  1. Dans le menu Fichier, pointez sur Nouveau, puis cliquez sur Fichier.

    La boîte de dialogue Nouveau fichier s'ouvre.

  2. Dans la liste Catégories, cliquez sur la catégorie Général si elle n'est pas déjà sélectionnée.

  3. Dans la liste Modèles, cliquez sur Fichier Sql, puis sur Ouvrir.

    L'éditeur Transact-SQL s'ouvre.

  4. Copiez le code suivant et collez-le dans l'éditeur Transact-SQL.

    PRINT N'Creating Sales...';
    GO
    CREATE SCHEMA [Sales]
        AUTHORIZATION [dbo];
    GO
    PRINT N'Creating Sales.Customer...';
    GO
    CREATE TABLE [Sales].[Customer] (
        [CustomerID]   INT IDENTITY (1, 1) NOT NULL,
        [CustomerName] NVARCHAR (40) NOT NULL,
        [YTDOrders] INT NOT NULL,
        [YTDSales] INT NOT NULL
    );
    GO
    PRINT N'Creating Sales.Orders...';
    GO
    CREATE TABLE [Sales].[Orders] (
        [CustomerID] INT NOT NULL,
        [OrderID] INT IDENTITY (1, 1) NOT NULL,
        [OrderDate] DATETIME NOT NULL,
        [FilledDate] DATETIME NULL,
        [Status] CHAR (1) NOT NULL,
        [Amount] INT NOT NULL
    );
    GO
    PRINT N'Creating Sales.Def_Customer_YTDOrders...';
    GO
    ALTER TABLE [Sales].[Customer]
        ADD CONSTRAINT [Def_Customer_YTDOrders] DEFAULT 0 FOR [YTDOrders];
    GO
    PRINT N'Creating Sales.Def_Customer_YTDSales...';
    GO
    ALTER TABLE [Sales].[Customer]
        ADD CONSTRAINT [Def_Customer_YTDSales] DEFAULT 0 FOR [YTDSales];
    GO
    PRINT N'Creating Sales.Def_Orders_OrderDate...';
    GO
    ALTER TABLE [Sales].[Orders]
        ADD CONSTRAINT [Def_Orders_OrderDate] DEFAULT GetDate() FOR [OrderDate];
    GO
    PRINT N'Creating Sales.Def_Orders_Status...';
    GO
    ALTER TABLE [Sales].[Orders]
        ADD CONSTRAINT [Def_Orders_Status] DEFAULT 'O' FOR [Status];
    GO
    PRINT N'Creating Sales.PK_Customer_CustID...';
    GO
    ALTER TABLE [Sales].[Customer]
        ADD CONSTRAINT [PK_Customer_CustID] PRIMARY KEY CLUSTERED ([CustomerID] ASC) WITH (ALLOW_PAGE_LOCKS = ON, ALLOW_ROW_LOCKS = ON, PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF, STATISTICS_NORECOMPUTE = OFF);
    GO
    PRINT N'Creating Sales.PK_Orders_OrderID...';
    GO
    ALTER TABLE [Sales].[Orders]
        ADD CONSTRAINT [PK_Orders_OrderID] PRIMARY KEY CLUSTERED ([OrderID] ASC) WITH (ALLOW_PAGE_LOCKS = ON, ALLOW_ROW_LOCKS = ON, PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF, STATISTICS_NORECOMPUTE = OFF);
    GO
    PRINT N'Creating Sales.FK_Orders_Customer_CustID...';
    GO
    ALTER TABLE [Sales].[Orders]
        ADD CONSTRAINT [FK_Orders_Customer_CustID] FOREIGN KEY ([CustomerID]) REFERENCES [Sales].[Customer] ([CustomerID]) ON DELETE NO ACTION ON UPDATE NO ACTION;
    GO
    PRINT N'Creating Sales.CK_Orders_FilledDate...';
    GO
    ALTER TABLE [Sales].[Orders]
        ADD CONSTRAINT [CK_Orders_FilledDate] CHECK ((FilledDate >= OrderDate) AND (FilledDate < '01/01/2010'));
    GO
    PRINT N'Creating Sales.CK_Orders_OrderDate...';
    GO
    ALTER TABLE [Sales].[Orders]
        ADD CONSTRAINT [CK_Orders_OrderDate] CHECK ((OrderDate > '01/01/2005') and (OrderDate < '01/01/2020'));
    GO
    PRINT N'Creating Sales.uspCancelOrder...';
    GO
    CREATE PROCEDURE [Sales].[uspCancelOrder]
    @OrderID INT
    AS
    BEGIN
    DECLARE @Delta INT, @CustomerID INT
    BEGIN TRANSACTION
        SELECT @Delta = [Amount], @CustomerID = [CustomerID]
         FROM [Sales].[Orders] WHERE [OrderID] = @OrderID;
    
    UPDATE [Sales].[Orders]
       SET [Status] = 'X'
    WHERE [OrderID] = @OrderID;
    
    UPDATE [Sales].[Customer]
       SET
       YTDOrders = YTDOrders - @Delta
        WHERE [CustomerID] = @CustomerID
    COMMIT TRANSACTION
    END
    GO
    PRINT N'Creating Sales.uspFillOrder...';
    GO
    CREATE PROCEDURE [Sales].[uspFillOrder]
    @OrderID INT, @FilledDate DATETIME
    AS
    BEGIN
    DECLARE @Delta INT, @CustomerID INT
    BEGIN TRANSACTION
        SELECT @Delta = [Amount], @CustomerID = [CustomerID]
         FROM [Sales].[Orders] WHERE [OrderID] = @OrderID;
    
    UPDATE [Sales].[Orders]
       SET [Status] = 'F',
           [FilledDate] = @FilledDate
    WHERE [OrderID] = @OrderID;
    
    UPDATE [Sales].[Customer]
       SET
       YTDSales = YTDSales - @Delta
        WHERE [CustomerID] = @CustomerID
    COMMIT TRANSACTION
    END
    GO
    PRINT N'Creating Sales.uspNewCustomer...';
    GO
    CREATE PROCEDURE [Sales].[uspNewCustomer]
    @CustomerName NVARCHAR (40)
    AS
    BEGIN
    INSERT INTO [Sales].[Customer] (CustomerName) VALUES (@CustomerName);
    SELECT SCOPE_IDENTITY()
    END
    GO
    PRINT N'Creating Sales.uspPlaceNewOrder...';
    GO
    CREATE PROCEDURE [Sales].[uspPlaceNewOrder]
    @CustomerID INT, @Amount INT, @OrderDate DATETIME, @Status CHAR (1)='O'
    AS
    BEGIN
    DECLARE @RC INT
    BEGIN TRANSACTION
    INSERT INTO [Sales].[Orders] (CustomerID, OrderDate, FilledDate, Status, Amount) 
         VALUES (@CustomerID, @OrderDate, NULL, @Status, @Amount)
    SELECT @RC = SCOPE_IDENTITY();
    UPDATE [Sales].[Customer]
       SET
       YTDOrders = YTDOrders + @Amount
        WHERE [CustomerID] = @CustomerID
    COMMIT TRANSACTION
    RETURN @RC
    END
    GO
    
  5. Dans le menu Fichier, cliquez sur Enregistrer SqlQuery_1.sql sous.

    La boîte de dialogue Enregistrer le fichier sous s'ouvre.

  6. Dans Nom de l'objet, tapez SampleImportScript.sql.

    Vous pouvez enregistrer le fichier dans un emplacement quelconque sur votre ordinateur. Souvenez-vous de l'emplacement car vous devrez l'utiliser dans la procédure suivante.

  7. Cliquez sur Enregistrer.

  8. Dans le menu Fichier, cliquez sur Fermer la solution.

    Ensuite, créez un projet de base de données et importez le schéma depuis le script que vous avez créé.

Pour importer un schéma de base de données à partir d'un script

  1. Dans le menu Projet, cliquez sur Importer un script de base de données.

  2. Cliquez sur Suivant après avoir lu la page d'accueil.

  3. Cliquez sur Parcourir et accédez à l'emplacement où vous avez enregistré le fichier SampleImportScript.sql.

  4. Double-cliquez sur le fichier SampleImportScript.sql, puis cliquez sur Terminer.

    Le script est importé et les objets définis dedans sont ajoutés à votre projet de base de données.

  5. Examinez la synthèse, puis cliquez sur Terminer.

Configurer, générer et déployer le projet de base de données

Ces procédures créent une base de données dont le schéma importé se trouve dans un environnement de développement isolé (ou bac à sable (sandbox)) dans lequel vous pouvez développer et tester la base de données.

Pour configurer et générer le projet de base de données

  1. Dans l'Explorateur de solutions, cliquez sur le projet CompareProject.

  2. Dans le menu Projet, cliquez sur Propriétés CompareProject.

    Les propriétés de votre projet CompareProject s'affichent.

  3. Cliquez sur l'onglet Déployer.

  4. Dans la liste Action de déploiement, cliquez sur Créer un script de déploiement (.sql) et le déployer vers la base de données.

  5. Dans Paramètres de la base de données cible, cliquez sur Modifier.

  6. Dans la boîte de dialogue Propriétés de connexion, définissez les propriétés de connexion pour la base de données que vous souhaitez utiliser, puis cliquez sur OK.

    La zone Connexion cible affiche la chaîne de connexion correcte.

    Avertissement

    Vous devez créer la base de données sur un serveur de test, un serveur de développement ou sur votre ordinateur local. Vous ne devez pas utiliser de serveur de production.

  7. Dans la zone Nom de la base de données cible, tapez CompareProjectDB.

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

  9. Dans le menu Générer, cliquez sur Générer la solution.

    Le script de déploiement est généré en fonction des propriétés de projet que vous venez de définir. L'état de la génération s'affiche dans la fenêtre Sortie et Génération : 1 a réussi ou est à jour apparaît en dernière ligne.

Pour déployer le projet de base de données

  1. Dans l'Explorateur de solutions, cliquez sur le projet CompareProject.

  2. Dans le menu Générer, cliquez sur Déployer CompareProject.

    Vous pouvez également cliquer avec le bouton droit de la souris sur le projet dans l'Explorateur de solutions, puis cliquer sur Déployer.

    Avertissement

    Vous devez exécuter ce déploiement sur un serveur de test, un serveur de développement ou votre ordinateur local. Vous ne devez pas utiliser votre serveur de production.

    Le projet de base de données est déployé vers une nouvelle base de données. L'état du déploiement s'affiche dans la fenêtre Sortie et Déploiement terminé apparaît en dernière ligne.

Phase de production

Ajouter une table au projet de base de données

Pour ajouter une table au projet

  1. Dans le menu Affichage, cliquez sur Vue Schéma de base de données.

    Vue Schéma s'ouvre et affiche le schéma du projet CompareProject.

  2. Dans Vue Schéma, développez successivement les nœuds CompareProject et Schémas.

  3. Cliquez avec le bouton droit de la souris sur Ventes, pointez sur Ajouter et cliquez sur Table.

    La boîte de dialogue Ajouter un nouvel élément - CompareProject s'ouvre.

  4. Sous Modèles, cliquez sur Table.

  5. Dans Nom, tapez InternationalShippers et cliquez sur Ajouter.

    Une table nommée InternationalShippers est ajoutée au projet CompareProject. La définition de table s'affiche dans l'éditeur Transact-SQL.

  6. Remplacez le script SQL du fichier InternationalShippers.table.sql par les instructions suivantes :

    CREATE TABLE [Sales].[InternationalShippers]
    (
    [ShipperID] [int] NOT NULL IDENTITY(1,1),
    [CompanyName] [nvarchar] (40) NOT NULL,
    [Region] [nvarchar] (40) NOT NULL,
    [Phone] [nvarchar] (24) NULL
    ) ON [PRIMARY]
    
  7. Cliquez sur Enregistrer InternationalShippers.table.sql.

  8. Dans la vue Schéma, cliquez avec le bouton droit sur la table InternationalShippers et cliquez sur Afficher le fichier dans l'Explorateur de solutions.

    Dans l'Explorateur de solutions, le fichier InternationalShippers.sql est mis en surbrillance.

  9. Appuyez sur F4.

    La fenêtre Propriétés apparaît et affiche les propriétés du fichier InternationalShippers.table.sql. La propriété Build Action a la valeur Build, ce qui indique que le fichier contient la définition d'un objet de base de données et qu'il doit être analysé et validé.

Comparer les deux schémas

Pour comparer les deux schémas

  1. Dans le menu Données, pointez sur Comparaison de schémas, puis cliquez sur Nouvelle comparaison de schémas.

  2. La boîte de dialogue Nouvelle comparaison de schémas s'affiche.

  3. Dans Schéma cible, cliquez sur Base de données et spécifiez une connexion à la base de données que vous avez préalablement déployée dans cette procédure pas à pas, puis cliquez sur OK.

    Le schéma de la base de données est comparé à celui de votre projet modifié ; les résultats s'affichent dans la fenêtre Comparaison de schémas. Dans la colonne CompareProject, la table [Ventes].[InternationalShippers] s'affiche. L'état de la table est Nouveau et la valeur de Mettre à jour l'action est Créer. Si vous propagez les modifications maintenant, la table est créée dans la base de données cible. Pour plus d'informations, consultez la procédure suivante :

Pour examiner et ignorer les différences attendues

  1. Dans la liste de résultats de la comparaison, faites défiler jusqu'à atteindre le nœud Fichiers SQL.

    Pour la base de données cible, deux lignes qui affichent l'état Manquant apparaissent dans la liste : une ligne pour le fichier de groupe de fichiers et une autre pour le fichier journal.

  2. Cliquez dans la colonne Mettre à jour l'action pour chaque ligne afin de faire passer l'action à Ignorer.

    Lorsque vous mettez à jour un schéma de base de données, vous ne souhaitez généralement pas modifier le fichier de groupe de fichiers ou le fichier journal associé à la base de données cible. Le passage de l'action à Ignorer entraîne la poursuite de l'utilisation des fichiers actifs par la base de données cible.

    Ensuite, vous pouvez éventuellement mettre à jour la base de données cible pour qu'elle corresponde à la base de données source.

Propager les modifications du projet vers la base de données

Pour propager les modifications vers la base de données cible

  • Dans la fenêtre Comparaison de schémas, cliquez sur Écrire les mises à jour.

    Notes

    Le bouton Écrire les mises à jour peut être désactivé si le projet contient une ou plusieurs erreurs. Si cela se produit, un message s'affiche dans la barre d'état Comparaison de schémas.

    Les actions répertoriées dans la fenêtre Comparaison de schémas, qui inclut l'action Créer pour la table InternationalShippers, sont exécutées. Cette synchronisation modifie le schéma de la base de données pour qu'elle corresponde à celui du projet de base de données. Une fois l'opération de mise à jour terminée, les schémas sont comparés à nouveau et les résultats sont actualisés.

    Pendant que le schéma cible est mis à jour, vous pouvez annuler l'opération en ouvrant le menu Données, en pointant sur Comparaison de schémas, puis en cliquant sur Arrêter l'écriture dans la cible.

    Avertissement

    Étant donné que certaines modifications de schémas ne peuvent pas être exécutées dans la portée d'une transaction, il est possible que vous perdiez des données si vous annulez une opération de mise à jour. Par exemple, une table dans la base de données cible a pu être supprimée pendant la préparation de sa nouvelle création. Si vous annulez la mise à jour à ce moment-là, vous pouvez perdre la table. Si ce genre de perte de données se produit, vous devez alors comparer à nouveau les schémas.

Voir aussi

Tâches

Comment : comparer des schémas de base de données

Comment : comparer et synchroniser les données de deux bases de données

Concepts

Comparer et synchroniser des schémas de base de données

Comparer et synchroniser les données d'une ou de plusieurs tables avec les données d'une base de données de référence