Импортируйте базу данных bacpac с помощью SqlPackage, проверьте существование и укажите местоположение

Могу ли я бежать SqlPackage импортировать bacpac, который может проверить базу данных перед запуском, а также указать, куда поместить .mdf, .ldf файл? Поэтому, когда база данных существует, она ничего не сделает; но если он не существует, он будет импортировать базу данных для меня?

1 ответ

SqlPackage.exe не принимает аргументы для указания расположения файлов mdf и ldf для действия импорта.

Есть несколько вариантов, чтобы обойти это:

  • Создайте пустую базу данных с нужными файлами mdf и ldf (используя, например, sqlcmd), а затем запустите SqlPackage.exe, чтобы импортировать файл bacpac в пустую базу данных.
  • Используйте "вкладчик развертывания", чтобы изменить поведение развертывания во время выполнения. Это немного сложно, поскольку включает компиляцию некоторого кода C# в dll.NET, который затем должен использоваться при выполнении операции импорта. Но приятно то, что вы можете переписать T-SQL, который исполняет SqlPackage.exe, как вам угодно. Вот примерный вкладчик развертывания, который изменяет пути к файлам данных и журналов: https://github.com/Microsoft/DACExtensions/blob/master/Samples/Contributors/DbLocationModifier.cs

Что касается различного поведения "существует", то "против не существует" - обратите внимание, что команда импорта откажется изменить непустую базу данных, поэтому можно безопасно выполнить операцию импорта независимо от того, существует ли база данных.

Другие вопросы по тегам