SQL Server Management Studio中的架构比较

适用于: SQL ServerAzure SQL 数据库Azure SQL 托管实例Azure Synapse Analytics

通过架构比较,可以比较两个数据库定义。 比较的源和目标可以是连接的数据库、SQL 数据库项目或 .dacpac 文件的任意组合。 比较完成后,结果将显示为一组操作,使目标与源相同。 数据库模型之间的差异类似于源代码管理差异。

如果架构比较目标是 SQL 项目或数据库,则可以直接从架构比较接口更新目标,或生成具有相同效果的更新脚本。

SQL Server Management Studio 中“架构比较”窗口的屏幕截图,显示源与目标之间的比较。

Schema Compare 提供以下功能:

  • 比较两 .dacpac 个文件、数据库或 SQL 数据库项目之间的架构。
  • 以一组操作的形式查看结果,以便将目标与源进行匹配。
  • 选择性地排除结果中列出的操作。
  • 设置控制比较范围的选项。
  • 将更改直接应用于目标,或生成脚本以在以后应用更改。
  • 将比较保存为文件 .scmp 以供重复使用。

先决条件

启动架构比较

可以从多个入口点打开 SSMS 中的架构比较。

对象资源管理器

右键单击对象资源管理器中的数据库,然后选择“任务>架构比较”。 所选数据库将自动设置为源。

解决方案资源管理器

右键单击解决方案资源管理器中的 SQL 数据库项目,然后选择“架构比较”。 所选项目将自动设置为源。

Note

若要在 解决方案资源管理器 中使用 SQL 数据库项目,需要 Database DevOps 工作负荷。

“工具”菜单

在 “工具” 菜单上,选择“ 架构比较”。 “架构比较”窗口打开时,不带预先设置的源或目标。

选择源和目标

架构比较打开后,选择源和目标进行比较。 每个数据库可以是连接的数据库、 .dacpac 文件或 SQL 数据库项目。

源和目标选择选项的屏幕截图,其中显示了数据库、数据层应用程序 (.dacpac) 和数据库项目选项。

  • 数据库:连接到正在运行的数据库实例。 源定义是您希望用作对目标进行更改基础的数据库定义。
  • 数据层应用程序(.dacpac):浏览到已 .dacpac 编译的文件。 .dacpac 包含数据库架构的快照。
  • 数据库项目:选择一个开源 SQL 数据库项目。 需要数据库 DevOps 工作负载。

目标是您想要评估并可能对其应用更改的数据库定义。

运行并查看比较

在工具栏中选择 “比较 ”以启动比较过程。

比较完成后, “结果 ”窗格会显示源和目标之间的结构差异。 比较结果按操作(如“删除”、“更改”或“添加”)对所有差异进行分组。

每一行标识源架构或目标架构(或两者)中的对象,以及进程对目标架构执行的操作,以使目标对象与源对象相同。 如果重命名对象或将其移动到新架构,则源名称和目标名称不同。 源名称以粗体显示,以突出显示差异。

默认情况下,结果列表隐藏两个架构中相同或不支持更新的对象(例如,内置对象)。 选择工具栏中的相应筛选器按钮以显示这些对象。

若要更改分组首选项,请在工具栏上选择“对结果分组”下拉列表。 选择 “类型” 以按对象类型(如表、视图或存储过程)对结果进行分组。

排除差异

默认情况下,“更新目标”操作在其范围中包含所有差异。 若要排除不想同步的差异,请清除每行的“包括”列。 相应行会立即变灰。架构比较更新目标时,不会处理该行的任何待处理更改。

如果排除的行具有依赖对象(如视图行引用的表行),则会禁用排除的行,但在取消选中所有依赖行之前,不会清除其复选框。 如果重构行(例如重命名或移动到另一个架构),则该行及其依赖子行将禁用该复选框。

比较选项

在工具栏中选择 “选项” 以配置要比较的对象以及忽略哪些类型的差异。 选项包括:

  • 忽略空格
  • 忽略分区方案
  • 忽略列顺序

还可以配置比较中包含的对象类型,例如表、存储过程、索引、权限和用户定义的类型。

应用更改

若要更新目标的架构,有两个选项:

  • 应用:直接从“架构比较”窗口将更改应用到目标数据库或项目。
  • Generate 脚本:生成捕获相同更改的 Transact-SQL 脚本,稍后可以查看和运行这些更改。

生成的脚本将显示在 Transact-SQL 编辑器中,你可以在其中检查和运行该脚本对数据库。

保存对比结果

可以将架构比较的比较定义保存为文件 .scmp ,称为 架构比较文件。 此文件在 XML 中存储有关比较设置的信息,并包括:

  • 源和目标连接信息
  • 比较选项
  • 排除的对象类型

在 SSMS 中打开一个文件,以便稍后再次运行同一 .scmp 比较,或与他人共享比较。 如果将 .scmp 文件保存为 SQL 数据库项目的一部分,则 .scmp 文件将显示在解决方案资源管理器中。 打开该文件将启动 Schema Compare,并加载其中的比较设置。