Wykluczanie konkretnej tabeli z wdrożenia SSDT

11

Mam istniejącą bazę danych ze wszystkim w schemacie dbo. Mam projekt SSDT z obiektami, które dodaję do niego za pomocą schematufoo

Mam tabelę, która wygląda tak w tym projekcie:

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
)

To zależy od dbo.a. dbo.a ma wiele kolumn, które są kluczami obcymi do innych kolumn. Ktoś inny (kto utrzymuje domyślny schemat) może zmienić dbo.a.

Chciałbym prosto przechowywać dbo.a jako:

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

Więc jest budowany wewnętrznie, ale nie jest wdrażany. Czy to jest możliwe?

Justin Dearing
źródło
Czy nie używasz Schema Compare do swoich wdrożeń? Możesz po prostu odznaczyć tę tabelę z listy po wykryciu zmian.
Dave
W tej chwili robię porównanie schematów, ale nie z mojego laptopa na serwer deweloperski chciałbym przeprowadzić rzeczywiste wdrożenie publikowania.
Justin Dearing,

Odpowiedzi:

11

Możesz użyć filtru wdrażania AgileSqlClub SqlPackage .

Skrócona instrukcja odtwarzane z oryginalnego artykułu przez Ed Elliott :

  1. Pobierz filtr z agilesqlclub.codeplex.com
  2. Umieść DLLw tym samym folderze cosqlpackage.exe
  3. Dodaj następujące parametry wiersza polecenia do swojego wdrożenia:

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

    Nie spowoduje to wdrożenia, upuszczenia ani zmiany czegokolwiek w BLAHschemacie.

Aby uzyskać szczegółowe informacje, zobacz oryginalny artykuł .

Lucazav
źródło
Kiedy wdrażam z devenv.exe za pośrednictwem plików foo.publish.xml, nie uruchamia się sqlpackage.exe. Czy istnieje sposób, aby to zrobić?
Justin Dearing
Nigdy nie używam devenv do wdrażania zmian, zamiast tego buduję projekt i używam skryptu do napędu sqlpackage.exe - w ten sposób możesz robić rzeczy takie jak korzystanie z współautorów wdrażania, a także testować ten sam skrypt, którego możesz używać w innych środowiskach w procesie ci!
Ed Elliott,
To była dla mnie ogromna pomoc, musiałem wdrożyć tylko określony schemat. Uwaga dla innych w przyszłości metoda ignoreschema może przyjąć wyrażenie regularne IgnoreSchema (^ (?! \ B (? I) BLAH \ b). *), Aby zignorować wszystko oprócz schematu
BLAH
3

SSDTTrudno zarządzać tylko częścią bazy danych . Jeśli nie było zależności, można po prostu zabronić upuszczania obiektów i nie włączać ich do projektu. Ponieważ istnieją zależności, ale nie chcesz nimi zarządzać, myślę, że będziesz musiał oszukać system.

Przychodzi mi na myśl jedna metoda: nie mam możliwości jej teraz przetestować i użyłem tylko „podobnej” metody, a nie tej dokładnie.

Opcja 1:

  1. Utwórz nowy projekt bazy danych dbo.a.

  2. Odwołaj się do tabeli z 3-częściową nazwą. W pierwszej części nazwy użyj zmiennej SQLCMD. Na przykład[$(DatabaseName)].dbo.a.

  3. Nigdy nie wdrażaj foobazy danych.

  4. Za pomocą plików publikowania lub interfejsu cli zrównaj $(DatabaseName)nazwę z prawdziwą bazą danych.

Młot SQL
źródło
Spróbuję tego
Justin Dearing
@JustinDearing Użyj metody filtru wdrażania, dokładnie pasuje do twojego przypadku użycia (tj. Zachowaj wszystkie tabele pod kontrolą źródła i po prostu zignoruj ​​niektóre podczas wdrażania)
Ed Elliott
0

„Czystym” wbudowanym sposobem na to (od 2016 r.) Jest użycie zapisanego pliku porównania schematów. Możesz:

  1. Wykonaj porównanie schematów (z projektu bazy danych -> serwer docelowy) i odznacz wszystkie obiekty, które chcesz wykluczyć z aktualizacji.
  2. Zapisz swój schemat porównania w pliku * .scmp
  3. Możesz skopiować i wkleić plik .scmp, aby utworzyć wersje dla różnych środowisk, jeśli to konieczne, i po prostu edytować w edytorze XML, aby zmienić źródło (wskazać, aby zbudować wyjściowy plik dacpac), połączenie itp. Lub nawet ręcznie dodać / zmodyfikować elementy w sekcji .
  4. Skonfiguruj parametry komendy wdrażania / publikowania programu dacpac, aby użyć odpowiedniego pliku .scmp do publikowania. np. SqlPackage.exe / Action: publish /SourceFile:c:\project\schema_compare.scmp

Więcej informacji tutaj: https://devblogs.microsoft.com/ssdt/schema-compare-in-sqlpackage-and-the-data-tier-application-framework-dacfx/

Jeremy H.
źródło