使用 SqlPackage 导入 bacpac 数据库,检查是否存在并指定位置

Import bacpac database with SqlPackage, check exist and specify location

我可以 运行 SqlPackage 导入 bacpac 吗,它可以检查 运行 之前的数据库是否存在,并指定放置 .mdf, .ldf 文件的位置?所以当数据库存在时,它不会做任何事情;但如果它不存在,它会为我导入数据库吗?

SqlPackage.exe 不接受为导入操作指定 mdf 和 ldf 文件位置的参数。

有几个选项可以解决这个问题:

  • 自己用所需的 mdf 和 ldf 文件创建一个空数据库(例如,使用 sqlcmd),然后 运行 SqlPackage.exe 将 bacpac 文件导入到空数据库中。
  • 使用 "deployment contributor" 修改 运行 时的部署行为。这有点复杂,因为它涉及将一些 C# 代码编译成 .NET dll,然后必须在执行导入操作时使用它。但好的部分是您可以根据需要重写 SqlPackage.exe 执行的 T-SQL。这是修改数据和日志文件路径的示例部署贡献者:https://github.com/Microsoft/DACExtensions/blob/master/Samples/Contributors/DbLocationModifier.cs

至于存在与不存在的不同行为 -- 请注意,导入命令将拒绝修改非空数据库,因此无论数据库是否已存在,执行导入操作都是安全的。