Надеюсь, это будет иметь какой-то смысл..
У нас есть несколько проектов баз данных, которые мы используем для поддержки схемы и создания сценариев обновления. Для создания сценариев обновления мы используем механизм автоматической сборки, который использует SqlPackage.exe для сравнения проекта базы данных с «шаблоном схемы», который является копией работающей базы данных, но без данных.
Одна из этих баз данных содержит ссылки на три других проекта баз данных.
Недавно мы обнаружили, что когда сценарий обновления создается для этого проекта базы данных, он включает рефакторинг SQL для таблиц, которые находятся в одном из проектов ссылок, а не в рассматриваемом проекте.
Таким образом, сценарий обновления включает в себя две партии SQL:
- Напечатайте заявления в начале о том, что объект схемы не будет переименован.
- Куча операторов вставки в __RefactorLog.
Проблема двоякая:
- Эти рефакторинги не должны быть включены в этот сценарий обновления; они принадлежат одному из упомянутых проектов базы данных - они не имеют ничего общего с этим.
- Поскольку эта база данных не требует рефакторинга, в ней нет таблицы с именем __RefactorLog, потому что скрипту обновления не нужно ее создавать. Это вызывает сбой сборки.
Я просмотрел настройки проекта базы данных и не вижу причин, по которым рефакторинг из проекта базы данных, на который ссылается, будет включен в проект, на который ссылается.
Любые идеи?
ОБНОВЛЕНИЕ. Отсутствующая таблица __RefactorLog была отвлекающим маневром. По какой-то причине он был включен в шаблон схемы, но не был включен в действующую базу данных, поэтому SqlPackage предположил, что ему не нужно его создавать. Тем не менее, я все еще хотел бы знать, почему весь рефакторинг из проекта базы данных, на который ссылаются, включен в проблемный проект.