如何使用 Visual Studio 将 Azure SQL 备份 (.bacpac) 导入到 LocalDB?

How to import Azure SQL backup (.bacpac) to LocalDB using Visual Studio?

我想这将是一个相当主流的场景,但我找不到如何将导出的 Azure SQL 数据库 (.bacpac) 导入我的 LocalDB Visual Studio 2013。我是漏掉了什么还是 Visual Studio 漏掉了什么?

(注意:如果有 SQL Server management studio,这里有解决方案,但我没有,如果可能的话,我不想安装它。)

如果你的机器上有这个文件夹 C:\Program Files (x86)\Microsoft SQL Server0\DAC\bin 那么你可以 运行 恢复 bacpac 文件的命令:

.\SqlPackage.exe /Action:Import /SourceFile:"c:\temp\your.bacpac" /TargetConnectionString:"Data Source=(localdb)\v11.0;Initial Catalog=devdb; Integrated Security=true;"

如果该文件夹丢失,您将需要 download the tooling from Microsoft

对我来说,正确的命令是:

.\SqlPackage.exe /Action:Import /SourceFile:"c:\temp\your.bacpac" /TargetConnectionString:"Data Source=(localdb)\mssqllocaldb;Initial Catalog=DBNAME;Integrated Security=true;"

否则会报错: *** Error importing database:Could not import package. Unable to connect to master or target server 'DBNAME'. You must have a user with the same password in master or target server 'DBNAME'.

使用VS2015,在anjdreas指定的位置:

C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\Extensions\Microsoft\SQLDB\DAC0

如果您想多次使用它,可以将 sqlpackage 添加到环境变量中,这样您就可以从任何文件夹中将 运行 sqlpackage 作为命令。

参见了解如何为环境变量添加路径,这并不难。

那么您可以从任何地方 运行: sqlpackage!要在添加后进行测试,只需从任何文件夹打开命令提示符或 powershell 并键入 sqlpackage,你应该得到类似这样的结果(记住先关闭所有以前打开的提示,以便它们可以得到更改):

然后是完整脚本:

sqlpackage /Action:Import /SourceFile:"C:...\SOMEDBBACKUP.bacpac" /TargetConnectionString:"Data Source=(localdb)\mssqllocaldb;Initial Catalog=bac_give_dbimport_any_name_you_want;Integrated Security=true;"

备注:

  1. 我的安装列出了一个全小写名称 sqlpackage.exe 的 exe,这就是我使用全小写 sqlpackage
  2. 的原因
  3. 我目前使用 VStudio 2019 的路径如下,但您可以使用最终路径找到您的/最新版本(我可以从“.../DAC/130”或 140 中选择或 150):

C:\Program Files (x86)\Microsoft Visual Studio19\Professional\Common7\IDE\Extensions\Microsoft\SQLDB\DAC0\sqlpackage.exe

  1. 对于导入的数据库名称,它不必与原始数据库名称匹配,因此 "bac_give_dbimport_any_name_you_want" 可以是您想要的任何名称。

传递 /TargetConnectionString 参数时,出现错误

Operation Import requires a value for the TargetDatabaseName parameter

SqlPackage.exe好像有点挑剔

我必须提供请求的参数 - TargetDatabaseNameTargetServerName(简称 tdntsn),它起作用了。

最终命令如下所示:

.\SqlPackage.exe /Action:Import /SourceFile:"c:\temp\your.bacpac" /tdn:"C:\temp\database.mdf" /tsn:"(LocalDB)\MSSQLLocalDB"