Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 使用SqlPackage导入bacpac数据库,检查是否存在并指定位置_Sql Server_Database_Import_Sqlpackage_Bacpac - Fatal编程技术网

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

Sql server 使用SqlPackage导入bacpac数据库,检查是否存在并指定位置,sql-server,database,import,sqlpackage,bacpac,Sql Server,Database,Import,Sqlpackage,Bacpac,我可以运行SqlPackage导入bacpac,它可以在运行之前检查数据库是否存在,还可以指定将.mdf、.ldf文件放在何处?因此,当数据库存在时,它不会做任何事情;但是如果它不存在,它将为我导入数据库?SqlPackage.exe不接受用于为导入操作指定mdf和ldf文件位置的参数 有几个选项可以解决此问题: 使用所需的mdf和ldf文件自己创建一个空数据库(例如使用sqlcmd),然后运行SqlPackage.exe将bacpac文件导入空数据库 使用“部署参与者”在运行时修改部署行为。

我可以运行
SqlPackage
导入
bacpac
,它可以在运行之前检查数据库是否存在,还可以指定将
.mdf、.ldf
文件放在何处?因此,当数据库存在时,它不会做任何事情;但是如果它不存在,它将为我导入数据库?

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

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

  • 使用所需的mdf和ldf文件自己创建一个空数据库(例如使用sqlcmd),然后运行SqlPackage.exe将bacpac文件导入空数据库
  • 使用“部署参与者”在运行时修改部署行为。这有点复杂,因为它需要将一些C#代码编译成.NET dll,然后在执行导入操作时必须使用该dll。但好的方面是,您可以重写SqlPackage.exe以您喜欢的方式执行的T-SQL。下面是修改数据和日志文件路径的示例部署参与者:

至于exists和NOT exists的不同行为——请注意,import命令将拒绝修改非空数据库,因此执行导入操作是安全的,而不考虑数据库是否已经存在。

我认为必须将t-SQL和sqlpackage.exe结合起来才能实现这一点。xp_cmdshell for sqlpackage.exe。@DeanSavović我尝试了您的解决方案,效果很好,谢谢:)我尝试了您对我的高级安装程序项目的建议,效果很好,谢谢