Как извлечь базу данных MSSQLServer как .dacpac без VerifyExtraction?

Я хочу извлечь схему базы данных базы данных MSSQLServer с помощью Server Management Studio. Я использую команду "Извлечение приложения уровня данных".

В базе данных несколько ссылок на другую базу данных. Из-за этого я получаю следующую ошибку.

Ошибка при извлечении базы данных: не удалось выполнить проверку модели схемы для пакета данных. Ошибка SQL71562: элемент проверки ошибок [dbo]. [X] имеет неразрешенную ссылку на объект [dbo]. [Y]. Внешние ссылки не поддерживаются при создании пакета с этой платформы.

Проблема заключается в том, что SSMS использует SQLPackage.exe с параметром /p: VerifyExtraction = True. Когда я использую консоль и вызываю SQLPackage.exe без этого параметра, он использует /p: VerifyExtraction = False по умолчанию, и я могу создать файл .dacpac.

Есть ли способ настроить SSMS для отключения проверки?

Ответы

Ответ 1

Мне также не удалось найти метод, который работает в SSMS (2008 R2 или 2012), но Visual Studio (2013) с SSDT, похоже, работает: В VS, перейдите в Проводник объектов SQL Server, подключитесь к сервер, щелкните правой кнопкой мыши соответствующую базу данных, Извлеките приложение уровня данных, а затем настройте параметры извлечения, одним из которых является "Проверить извлечение". Я не знаю, почему MS не просто создает это в SSMS.

Одна из нескольких вещей, которые я заметил из этого, заключается в том, что VS будет только извлекать .DacPac с помощью этого метода. Даже если вы решите добавить данные в выписку, расширение остается .DacPac. У меня создалось впечатление, что .DacPacs предназначены исключительно для Schema Only, тогда как .BacPacs предназначены для Schema + Data. Независимо от того, что после того, как VS создал файл .DacPac(Schema + Data), SSMS смог импортировать его с помощью мастера "Развертывание уровня данных...".

Ответ 2

Если вы не можете использовать Visual Studio, вы можете использовать приложение командной строки SqlPackage для извлечения схемы из базы данных. По умолчанию этот не выполняет проверку схемы (нет, я не знаю, почему SSMS и предложение командной строки имеют разные значения по умолчанию!). SqlPackage.exe можно найти в C:\Program Files (x86)\Microsoft SQL Server\110\DAC\bin.

Например, следующий пример извлекает схему для MyDatabase из локального экземпляра SQL Server и выводит ее в файл .dacpac в локальной файловой системе:

sqlpackage /Action:Extract /SourceDatabaseName:"MyDatabase" /SourceServerName:localhost /TargetFile:"C:\SomeDirectory\MyDatabase.dacpac"

Если вы хотите включить проверку схемы на более позднем этапе, вы можете явно установить флаг, добавив /p:VerifyExtraction=True в командную строку.

Полную информацию о SqlPackage.exe можно найти здесь:

https://msdn.microsoft.com/library/hh550080.aspx