Виключення конкретної таблиці з розгортання SSDT


11

У мене є існуюча база даних із усім, що є в схемі dbo. У мене є проект SSDT з об'єктами, які я додаю до нього за допомогою схемиfoo

У мене в проекті є таблиця, яка виглядає приблизно так:

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
)

Це залежить від dbo.a. dbo.a має багато стовпців, які є зовнішніми ключами до інших стовпців. Хтось інший (хто підтримує схему за замовчуванням) може змінити dbo.a.

Я хотів би простий магазин dbo.a:

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

Таким чином, він будується внутрішньо, але не розгортається. Це можливо?


Ви не використовуєте схему Порівняння для своїх пристроїв? Ви можете просто зняти цю таблицю зі списку, коли виявлені зміни.
Дейв

Я роблю схему порівняння в момент, але ні від мого ноутбука до сервера розробників, я хотів би зробити фактичне розгортання публікації.
Justin Dearing

Відповіді:


11

Можна скористатися фільтром розгортання AgileSqlClub SqlPackage .

Короткі інструкції відтворені з оригінальної статті по Ed Елліот :

  1. Завантажте фільтр з agilesqlclub.codeplex.com
  2. Помістіть DLLпапку в ту саму папку, що іsqlpackage.exe
  3. Додайте до розгортання ці параметри командного рядка:

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

    Це ні в BLAHсхемі не розгортає, не видаляє і не змінює нічого .

Детальні відомості див. У оригінальній статті .


Коли я розгортаю файли devenv.exe через файли foo.publish.xml, він не породить sqlpackage.exe. Чи є спосіб, щоб я змусив це зробити?
Justin Dearing

Що я роблю, це ніколи не використовувати devenv для розгортання змін, а замість цього створити проект і використовувати сценарій для керування sqlpackage.exe - таким чином ви можете легко робити такі речі, як користувачі, що розробляють розгортання, а також тестувати той самий сценарій, який ви можете використовувати в інших середовищах у вашому процесі ци!
Ед Елліотт

Це було для мене масовою допомогою, мені потрібно було розгорнути лише певну схему. Зауважте, для інших у майбутньому метод ignoreschema може взяти в регулярний вираз IgnoreSchema (^ (?! \ B (? I) BLAH \ b). *), Щоб ігнорувати все, крім схеми
BLAH

3

Тільки керувати частиною бази даних SSDTскладно. Якщо б не було залежностей, ви можете просто заборонити йому скидати об'єкти і не включати їх у проект. Оскільки існують залежності, але ви не хочете ними керувати, я думаю, що вам доведеться обдурити систему.

Один метод приходить на думку, я не маю можливості перевірити їх зараз, і я використовував лише "подібний" метод до цього, а не саме цей.

Варіант №1:

  1. Створіть новий проект бази даних з dbo.aним.

  2. Посилайтеся на таблицю з 3-частинним іменем. Для першої частини імені використовуйте змінну SQLCMD. Напр[$(DatabaseName)].dbo.a.

  3. Ніколи не розгортайте fooбазу даних.

  4. За допомогою файлів публікації або кліпу зробіть $(DatabaseName)однакове ім’я, як і ваша реальна база даних.


Збираюся спробувати це
Джастін Діргінг

@JustinDearing Використовуйте метод фільтра розгортання, він точно відповідає вашому випадку використання (тобто зберігайте всі таблиці в контролі джерел і просто ігноруйте деякі при розгортанні)
Ед Елліотт

0

"Чистий" вбудований спосіб зробити це (станом на 2016 рік) використовує збережений файл Порівняння схем. Ти можеш:

  1. Виконайте порівняння схем (з проекту вашої бази даних -> цільовий сервер) і зніміть прапорці для об'єктів, які ви хочете виключити для оновлення.
  2. Збережіть схему порівняння у файлі * .scmp
  3. Ви можете скопіювати та вставити .scmp-файл для створення версій для різних середовищ, якщо це потрібно, та просто відредагувати в редакторі XML, щоб змінити джерело (вказати на створення вихідного файлу dacpac), з'єднання тощо або навіть вручну додати / змінити елементи в розділі .
  4. Налаштуйте параметри команди dacpac для розгортання / опублікування для використання відповідного .scmp-файла для публікації. наприклад SqlPackage.exe / Action: опублікувати /SourceFile:c:\project\schema_compare.scmp

Більше інформації тут: https://devblogs.microsoft.com/ssdt/schema-compare-in-sqlpackage-and-the-data-tier-application-framework-dacfx/

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.