Импортируйте базу данных 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
Что касается различного поведения "существует", то "против не существует" - обратите внимание, что команда импорта откажется изменить непустую базу данных, поэтому можно безопасно выполнить операцию импорта независимо от того, существует ли база данных.