Исключение определенной таблицы из развертывания 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
)

Так что он создается внутри, а не разворачивается. Это возможно?

Джастин Даринг
источник
Разве вы не используете Schema Compare для своих развертываний? Вы можете просто снять эту таблицу из списка при обнаружении изменений.
Дейв
Я делаю сравнение схем в данный момент, но не с моего ноутбука на сервер разработки, я хотел бы сделать фактическое развертывание публикации.
Джастин Даринг

Ответы:

11

Вы можете использовать фильтр развертывания AgileSqlClub SqlPackage .

Краткие инструкции воспроизведены из оригинальной статьи по Ed Эллиот :

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

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

    Это не будет ни развертывать, ни удалять, ни изменять что-либо в BLAHсхеме.

Смотрите оригинальную статью для более подробной информации.

lucazav
источник
Когда я выполняю развертывание из devenv.exe через файлы foo.publish.xml, он не создает sqlpackage.exe. Есть ли способ, которым я могу это сделать?
Джастин Даринг
Я никогда не использую devenv для развертывания изменений, а собираю проект и использую скрипт для запуска sqlpackage.exe - таким образом вы можете легко выполнять такие действия, как использование участников развертывания, а также тестировать тот же скрипт, который вы можете использовать в других средах. в вашем процессе!
Эд Эллиотт
Это было огромной помощью для меня, мне нужно было развернуть только определенную схему. Примечание для других в будущем, метод ignoreschema может принимать регулярное выражение IgnoreSchema (^ (?! \ B (? I) BLAH \ b). *), Чтобы игнорировать все, кроме схемы
BLAH
3

SSDTСложно управлять только частью базы данных . Если бы не было никаких зависимостей, то вы могли бы просто запретить ему удалять объекты и не включать его в проект. Поскольку существуют зависимости, но вы не хотите ими управлять, я думаю, что вам придется обмануть систему.

Один метод приходит на ум, у меня нет возможности проверить их прямо сейчас, и я использовал только «подобный» метод для этого, а не этот точно.

Опция 1:

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

  2. Ссылка на таблицу с именами из трех частей. Для первой части имени используйте переменную SQLCMD. Например[$(DatabaseName)].dbo.a.

  3. Никогда не развертывайте свою fooбазу данных.

  4. С помощью файлов публикации или интерфейса cli сделайте $(DatabaseName)то же имя, что и ваша настоящая база данных.

SQL Hammer
источник
Попробую это
Джастин Даринг
@JustinDearing Используйте метод фильтра развертывания, он в точности соответствует вашему варианту использования (т. Е. Держите все таблицы в системе контроля версий и просто игнорируйте некоторые при развертывании)
Эд Эллиотт
0

«Чистый» встроенный способ сделать это (по состоянию на 2016 год) использует сохраненный файл сравнения схем. Вы можете:

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

Более подробная информация здесь: https://devblogs.microsoft.com/ssdt/schema-compare-in-sqlpackage-and-the-data-tier-application-framework-dacfx/

Джереми Х
источник