Escludendo una tabella specifica da una distribuzione SSDT


11

Ho un database esistente con tutto nello schema dbo. Ho un progetto SSDT con oggetti che sto aggiungendo ad esso con schemafoo

Ho una tabella che assomiglia a questa nel progetto:

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
)

Dipende da dbo.a. dbo.a ha molte colonne che sono chiavi esterne di altre colonne. Qualcun altro (che mantiene lo schema predefinito) potrebbe cambiare dbo.a.

Vorrei semplicemente archiviare dbo.a come:

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

Quindi viene costruito internamente, ma non distribuito. È possibile?


Non usi Schema Compare per le tue distribuzioni? Puoi semplicemente deselezionare quella tabella dall'elenco quando vengono rilevate modifiche.
Dave,

Sto eseguendo un confronto dello schema in questo momento, ma no dal mio laptop al server di sviluppo mi piacerebbe fare una vera distribuzione di pubblicazione.
Justin Dearing il

Risposte:


11

È possibile utilizzare il filtro di distribuzione SqlPackage AgileSqlClub .

Brevi istruzioni riprodotte dall'articolo originale di Ed Elliott :

  1. Scarica il filtro da agilesqlclub.codeplex.com
  2. Metti il DLLnella stessa cartella disqlpackage.exe
  3. Aggiungi questi parametri della riga di comando alla tua distribuzione:

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

    Ciò non distribuirà, eliminerà o altererà nulla nello BLAHschema.

Vedi l' articolo originale per i dettagli completi.


Quando eseguo la distribuzione da devenv.exe tramite i file foo.publish.xml, non genera sqlpackage.exe. C'è un modo in cui posso farlo farlo?
Justin Dearing il

Quello che faccio non è mai usare devenv per distribuire le modifiche, invece costruisci il progetto e usa uno script per guidare sqlpackage.exe - in questo modo puoi fare cose come usare facilmente i contributori di distribuzione e testare lo stesso script che puoi usare negli altri tuoi ambienti nel tuo processo ci!
Ed Elliott,

Questo è stato di grande aiuto per me, dovevo distribuire solo uno schema particolare. Nota per gli altri in futuro, il metodo ignoreschema può prendere in regex IgnoreSchema (^ (?! \ B (? I) BLAH \ b). *) Per ignorare tutto tranne lo schema
BLAH

3

È SSDTdifficile gestire solo una parte di un database . Se non vi fossero dipendenze, è possibile semplicemente impedirgli di eliminare oggetti e non includerli nel progetto. Dato che ci sono dipendenze, ma non vuoi gestirle, penso che dovrai ingannare il sistema.

Mi viene in mente un metodo, non ho la possibilità di testarli in questo momento e ho usato solo un metodo "simile" a questo, non esattamente questo.

Opzione 1:

  1. Crea un nuovo progetto di database con dbo.aal suo interno.

  2. Fare riferimento alla tabella con denominazione in 3 parti. Per la prima parte del nome, utilizzare una variabile SQLCMD. Per esempio[$(DatabaseName)].dbo.a.

  3. Non distribuire mai il foodatabase.

  4. Tramite i file di pubblicazione o l'interfaccia cli, rendere $(DatabaseName)uguale lo stesso nome del database reale.


Andando a provare questo
Justin Dearing il

@JustinDearing Utilizza il metodo di filtro di distribuzione, si adatta esattamente al tuo caso d'uso (vale a dire mantieni tutte le tabelle nel controllo del codice sorgente e ne ignori alcune durante la distribuzione)
Ed Elliott,

0

Un modo integrato "pulito" per farlo (a partire dal 2016) sta usando un file Schema Compare salvato. Puoi:

  1. Esegui il tuo Schema Compare (dal tuo progetto di database -> un server di destinazione) e deseleziona tutti gli oggetti che vuoi escludere per l'aggiornamento.
  2. Salva il tuo Schema Compare in un file * .scmp
  3. È possibile copiare e incollare il file .scmp per creare versioni per diversi ambienti, se necessario, e semplicemente modificarlo nell'editor XML per cambiare origine (per puntare a creare file dacpac di output), connessione, ecc. O anche aggiungere / modificare manualmente gli elementi nella sezione .
  4. Configurare i parametri del comando di distribuzione / pubblicazione di dacpac per utilizzare il file .scmp appropriato per la pubblicazione. ad es. SqlPackage.exe / Azione: publishing /SourceFile:c:\project\schema_compare.scmp

Maggiori informazioni qui: https://devblogs.microsoft.com/ssdt/schema-compare-in-sqlpackage-and-the-data-tier-application-framework-dacfx/

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.