Как опубликовать файл DACPAC в проекте базы данных SQL Server с помощью SQLPackage.exe из SSDT?

Я использую SSDT для Visual Studio 2012 здесь и используя свой инструмент командной строки SQLPackage.exe для публикации файла .dacpac.

Я хочу опубликовать это в SQL Server database project. Я пытаюсь использовать параметр в этом руководстве, но не могу найти способы, как это сделать.

Как я могу это сделать?

Ответ 1

Вы пытаетесь опубликовать в базе данных или создать проект базы данных из dacpac? Это две разные вещи.

  • Чтобы создать проект базы данных на основе dacpac, создайте новый проект базы данных SQL Server в Visual Studio. Затем щелкните правой кнопкой мыши проект в обозревателе решений и выберите "Импорт → Приложение уровня данных (*.dacpac)" и выберите свой dacpac. Это преобразует содержимое dacpac в скрипты в проекте, и если вы выберете "Импортировать настройки базы данных", параметры базы данных будут установлены на основе настроек в dacpac. К сожалению, нет способа сделать это с помощью инструмента командной строки, о котором я знаю.

  • Чтобы использовать SqlPackage.exe для публикации в базе данных, в руководстве, к которому вы привязались, есть все варианты. Простой командой будет "sqlpackage/a: publish/sf:db1.dacpac/tsn: localhost/tdn: db1" для публикации dacpac "db1" в базе данных "localhost\db1". Для других вариантов публикации введите "sqlpackage/a: publish/?" для получения списка применимых действий в командной строке.

Ответ 2

С помощью Powershell вы можете выполнить развертывание либо в стандартных локальных экземплярах SQL, либо в Azure SQL Instance. Строка подключения и другие свойства будут передаваться из PublishProfile

$PublishPath = "Path for the log"
$dacpac = "dbname.dacpac"
$publishProfile = "dbname.xml" # Publish profile xml for Publishing the database project

# Generate Deploy Report
$DeployReport =  ".\sqlpackage.exe /Action:DeployReport /Sourcefile:$dacpac '
                   /pr:'$publishProfile' /outputpath:$PublishPath"

Invoke-Expression $DeployReport

# Generate Script Report
$GenerateScript =  ".\sqlpackage.exe /Action:Script /Sourcefile:$dacpac '
                     /pr:'$publishProfile' /outputpath:$PublishPath"

Invoke-Expression $GenerateScript

# Database Publish
$publish = ".\sqlpackage.exe /Action:Publish /Sourcefile:$dacpac '
             /pr:'$publishProfile'"

Invoke-Expression $publish | Out-File $PublishPath