Ausschließen einer bestimmten Tabelle von einer SSDT-Bereitstellung

10

Ich habe eine vorhandene Datenbank mit allem im Schema dbo. Ich habe ein SSDT-Projekt mit Objekten, die ich mit einem Schema hinzufügefoo

Ich habe eine Tabelle, die im Projekt so aussieht:

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
)

Es hängt von dbo.a ab. dbo.a hat viele Spalten, die Fremdschlüssel für andere Spalten sind. Jemand anderes (der das Standardschema verwaltet) ändert möglicherweise dbo.a.

Ich möchte dbo.a einfach speichern als:

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

Es wird also intern erstellt, aber nicht bereitgestellt. Ist das möglich?

Justin Dearing
quelle
Verwenden Sie Schema Compare nicht für Ihre Bereitstellungen? Sie können diese Tabelle einfach aus der Liste entfernen, wenn Änderungen festgestellt werden.
Dave
Ich mache im Moment einen Schema-Vergleich, aber nein, von meinem Laptop zum Entwicklungsserver möchte ich eine tatsächliche Veröffentlichungsbereitstellung durchführen.
Justin Dearing

Antworten:

11

Sie können den AgileSqlClub SqlPackage-Bereitstellungsfilter verwenden .

Kurze Anweisungen aus dem Originalartikel von Ed Elliott :

  1. Laden Sie den Filter von agilesqlclub.codeplex.com herunter
  2. Legen Sie das DLLin den gleichen Ordner wiesqlpackage.exe
  3. Fügen Sie Ihrer Bereitstellung die folgenden Befehlszeilenparameter hinzu:

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

    Dadurch wird nichts im BLAHSchema bereitgestellt, gelöscht oder geändert.

Ausführliche Informationen finden Sie im Originalartikel .

lucazav
quelle
Wenn ich von devenv.exe über die Dateien foo.publish.xml bereitstelle, wird sqlpackage.exe nicht erzeugt. Gibt es eine Möglichkeit, wie ich das schaffen kann?
Justin Dearing
Ich verwende niemals devenv, um Änderungen bereitzustellen, sondern erstelle das Projekt und verwende ein Skript, um sqlpackage.exe zu steuern. Auf diese Weise können Sie beispielsweise Bereitstellungsbeiträge einfach verwenden und dasselbe Skript testen, das Sie in Ihren anderen Umgebungen verwenden können in deinem ci prozess!
Ed Elliott
Dies war eine große Hilfe für mich. Ich musste nur ein bestimmtes Schema bereitstellen. Hinweis für andere in Zukunft, die ignoreschema-Methode kann Regex IgnoreSchema (^ (?! \ B (? I) BLAH \ b). *) Aufnehmen, um alles außer dem BLAH-Schema zu ignorieren
andyb952
3

Es SSDTist schwierig, nur einen Teil einer Datenbank mit zu verwalten . Wenn es keine Abhängigkeiten gäbe, könnten Sie einfach zulassen, dass Objekte gelöscht und nicht in das Projekt aufgenommen werden. Da es Abhängigkeiten gibt, die Sie aber nicht verwalten möchten, müssen Sie das System austricksen.

Eine Methode fällt mir ein: Ich kann sie derzeit nicht testen, und ich habe nur eine "ähnliche" Methode verwendet, nicht genau diese.

Option 1:

  1. Erstellen Sie ein neues Datenbankprojekt mit dbo.adarin.

  2. Verweisen Sie auf die Tabelle mit dreiteiliger Benennung. Verwenden Sie für den ersten Teil des Namens eine SQLCMD-Variable. Z.B[$(DatabaseName)].dbo.a.

  3. Stellen Sie niemals Ihre fooDatenbank bereit .

  4. Stellen Sie über die Veröffentlichungsdateien oder die CLI-Oberfläche $(DatabaseName)den gleichen Namen wie Ihre echte Datenbank ein.

SQL Hammer
quelle
Ich werde es versuchen
Justin Dearing
@ JustinDearing Verwenden Sie die Bereitstellungsfiltermethode, sie passt genau zu Ihrem Anwendungsfall (dh behalten Sie alle Tabellen in der Quellcodeverwaltung bei und ignorieren Sie einige bei der Bereitstellung)
Ed Elliott
0

Eine "saubere" integrierte Methode, um dies zu tun (Stand 2016), ist die Verwendung einer gespeicherten Schema-Vergleichsdatei. Du kannst:

  1. Führen Sie Ihren Schema-Vergleich durch (aus Ihrem Datenbankprojekt -> einem Zielserver) und deaktivieren Sie alle Objekte, die Sie für die Aktualisierung ausschließen möchten.
  2. Speichern Sie Ihr Schema. Vergleichen Sie mit einer * .scmp-Datei
  3. Sie können die .scmp-Datei kopieren und einfügen, um bei Bedarf Versionen für verschiedene Umgebungen zu erstellen, und sie einfach im XML-Editor bearbeiten, um die Quelle (um auf die Erstellung der Dacpac-Ausgabedatei zu verweisen), die Verbindung usw. zu ändern oder sogar Elemente im Abschnitt manuell hinzuzufügen / zu ändern .
  4. Konfigurieren Sie die Befehlsparameter für die Dacpac-Bereitstellung / Veröffentlichung so, dass die entsprechende .scmp-Datei für die Veröffentlichung verwendet wird. zB SqlPackage.exe / Aktion: Publizieren Sie /SourceFile:c:\project\schema_compare.scmp

Weitere Informationen finden Sie hier: https://devblogs.microsoft.com/ssdt/schema-compare-in-sqlpackage-and-the-data-tier-application-framework-dacfx/

Jeremy H.
quelle