16

在用于 Visual Studio 的 Sql Server Data Tools 中,您可以创建 Sql Server 项目并导入数据库的结构。这很好用。

是否也可以导入数据?例如,假设我有一个包含多种类型的类型表。我想在 Sql Server 项目中有这些数据,所以当我发布它时,它也会发布数据。

我能想到的最接近的是使用 Sql Server 对象资源管理器为数据创建一个脚本,然后手动将该脚本添加到项目中。

当我看到 Sql Server Data Tools 的演示,然后显示发布项目,然后使用复制和粘贴将数据获取到数据库中。肯定有更好的方法。

编辑多年后,我终于弄清楚了:有两种类型的导出:1. DACPAK - 仅包括结构,2. BACBAK,包括数据和结构。

您可以从 SSMS 创建: 1. DACPAK:选择您的数据库,右键单击任务 -> 提取数据层应用程序。2. 选择数据库,右键单击任务-> 导出数据层应用程序。

4

2 回答 2

11

多年后,我终于弄清楚了:有两种类型的出口:

  1. DACPAC - 仅包括结构
  2. BACPAC 包括数据和结构。

您可以从 SSMS 创建:

  1. DACPAC:选择您的数据库,右键单击任务-> 提取数据层应用程序。
  2. BACPAC:选择数据库,右键单击任务-> 导出数据层应用程序。
于 2016-05-11T16:19:08.330 回答
10

正如您所要求的,这并不完全来自 Visual Studio,但它可能是一种解决方法。如果您的数据库存在于开发服务器中,那么也许您可以使用SqlPackage.exe ExportExtract操作:

出口

默认情况下,所有表的数据都将包含在 .bacpac 文件中。

SqlPackage.exe 导出操作将实时数据库从 SQL Server 或 Windows Azure SQL 数据库导出到 BACPAC 包(.bacpac 文件)。默认情况下,所有表的数据都将包含在 .bacpac 文件中。或者,您可以仅指定要为其导出数据的表子集。即使为导出指定了表的子集,导出操作的验证也可确保整个目标数据库的 Windows Azure SQL 数据库兼容性。

sqlpackage.exe /action:Export /TargetFile:"test.bacpac" 
    /sourceDatabasename:test 
    /sourceservername:.\testserver

您可以导入您的bacpac文件 https://msdn.microsoft.com/en-us/library/hh710052.aspx

提取物

使用用户表数据创建 DACPAC

sqlpackage.exe /action:Extract /TargetFile:"test.dacpac" 
    /sourceDatabasename:test 
    /sourceservername:".\testserver"
    /p:ExtractAllTableData=true

如果您不想使用 SqlPackage.exe这篇文章很旧,但它有三个可能有效的解决方法:

1) 使用 SSMS 对象资源管理器中 [Server]/Management/Data-tier Application/[Application Name] 节点下的 SSMS 的“升级数据层应用程序...”向导重新部署相同的 .dacpac 文件。升级向导提供了复选框选项以执行 .dacpac 文件中的部署前和/或部署后脚本。启用部署前和部署后脚本选项,然后执行升级将产生预期的结果。

2) 使用 SSMS 查询窗口、SQLCMD.exe 或类似文件手动执行 DACPAC 部署前和/或部署后 T-SQL 脚本文件。这要求 DACPAC 作者将部署前/部署后脚本与 DACPAC 文件一起提供。或者,可以使用 Microsoft DacUnpack.exe 实用程序或 ZIP 文件实用程序(将文件扩展名从 .dacpac 重命名为 .zip 后)提取部署前/部署后脚本。

3) 使用 MSBuild.exe(v4.0.30319.1 或更高版本)或 Visual Studio 2010 Premium SP1(或更高版本)部署“SQL Server 数据层应用程序”项目文件。(例如:“msbuild /Target:Deploy DeploymentDemo.dbproj”)。

于 2015-10-31T18:32:41.073 回答