Exclure une table spécifique d'un déploiement SSDT


11

J'ai une base de données existante avec tout dans le schéma dbo. J'ai un projet SSDT avec des objets que j'y ajoute avec un schémafoo

J'ai une table qui ressemble à ceci dans le projet:

CREATE table foo.a (
    id INT NOT NULL
        CONSTRAINT [PK_foo_a] PRIMARY KEY CLUSTERED
        CONSTRAINT [FK_foo_a] FOREIGN KEY REFERENCES [dbo].[a],
    desc NVARCHAR(50) NOT NULL
)

Cela dépend de dbo.a. dbo.a a de nombreuses colonnes qui sont des clés étrangères à d'autres colonnes. Quelqu'un d'autre (qui maintient le schéma par défaut) peut changer dbo.a.

Je voudrais simplement stocker dbo.a comme:

CREATE table dbo.a (
    id INT NOT NULL
        CONSTRAINT [PK_a] PRIMARY KEY CLUSTERED
)

Il est donc construit en interne, mais pas déployé. Est-ce possible?


N'utilisez-vous pas Schema Compare pour vos déploiements? Vous pouvez simplement décocher ce tableau de la liste lorsque des modifications sont détectées.
Dave

Je fais une comparaison de schéma au moment, mais pas de mon ordinateur portable au serveur de développement, je voudrais faire un véritable déploiement de publication.
Justin Dearing

Réponses:


11

Vous pouvez utiliser le filtre de déploiement AgileSqlClub SqlPackage .

Brèves instructions reproduites de l'article original d' Ed Elliott :

  1. Téléchargez le filtre sur agilesqlclub.codeplex.com
  2. Mettez le DLLdans le même dossier quesqlpackage.exe
  3. Ajoutez ces paramètres de ligne de commande à votre déploiement:

    /p:AdditionalDeploymentContributors=AgileSqlClub.DeploymentFilterContributor /p:AdditionalDeploymentContributorArguments="SqlPackageFilter=IgnoreSchema(BLAH)"

    Cela ne déploiera, ne supprimera ou ne modifiera rien dans le BLAHschéma.

Voir l' article d'origine pour plus de détails.


Lorsque je déploie à partir de devenv.exe via les fichiers foo.publish.xml, il ne génère pas sqlpackage.exe. Existe-t-il un moyen de le faire faire cela?
Justin Dearing

Ce que je fais, ce n'est jamais utiliser devenv pour déployer des modifications, mais plutôt construire le projet et utiliser un script pour piloter sqlpackage.exe - de cette façon, vous pouvez faire des choses comme utiliser facilement les contributeurs de déploiement et également tester le même script que vous pouvez utiliser dans vos autres environnements dans votre processus ci!
Ed Elliott

Ce fut une aide massive pour moi, je n'avais besoin de déployer qu'un schéma particulier. Remarque pour d'autres à l'avenir, la méthode ignoreschema peut prendre en regex IgnoreSchema (^ (?! \ B (? I) BLAH \ b). *) Pour ignorer tout sauf le schéma
BLAH

3

Seule la gestion d'une partie d'une base de données avec SSDTest difficile. S'il n'y avait pas de dépendances, vous pouvez simplement l'interdire de supprimer des objets et ne pas l'inclure dans le projet. Puisqu'il y a des dépendances, mais que vous ne voulez pas les gérer, je pense que vous devrez tromper le système.

Une méthode me vient à l'esprit, je n'ai pas la possibilité de les tester pour le moment et je n'ai utilisé qu'une méthode "similaire" à celle-ci, pas celle-ci exactement.

Option 1:

  1. Créez un nouveau projet de base de données avec dbo.a.

  2. Référencez le tableau avec une dénomination en 3 parties. Pour la première partie du nom, utilisez une variable SQLCMD. Par exemple[$(DatabaseName)].dbo.a.

  3. Ne déployez jamais votre foobase de données.

  4. Via les fichiers de publication ou l'interface cli, faites $(DatabaseName)correspondre le même nom que votre vraie base de données.


Va essayer ceci
Justin Dearing

@JustinDearing Utilisez la méthode du filtre de déploiement, elle correspond exactement à votre cas d'utilisation (c'est-à-dire garder toutes les tables sous contrôle de source et en ignorer quelques-unes lors du déploiement)
Ed Elliott

0

Une méthode intégrée «propre» pour ce faire (à partir de 2016) utilise un fichier de comparaison de schéma enregistré. Vous pouvez:

  1. Effectuez votre comparaison de schéma (à partir de votre projet de base de données -> un serveur cible) et décochez tous les objets que vous souhaitez exclure pour la mise à jour.
  2. Enregistrez votre comparaison de schéma dans un fichier * .scmp
  3. Vous pouvez copier et coller le fichier .scmp pour créer des versions pour différents environnements si nécessaire et simplement modifier dans l'éditeur XML pour changer la source (pour pointer pour construire le fichier dacpac de sortie), la connexion, etc. ou même ajouter / modifier manuellement des éléments dans la section .
  4. Configurez vos paramètres de commande de déploiement / publication dacpac pour utiliser le fichier .scmp approprié pour la publication. par exemple SqlPackage.exe / Action: publier /SourceFile:c:\project\schema_compare.scmp

Plus d'informations ici: https://devblogs.microsoft.com/ssdt/schema-compare-in-sqlpackage-and-the-data-tier-application-framework-dacfx/

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.