适用于: SQL Server
Azure SQL 数据库
Azure SQL 托管实例
Azure Synapse Analytics
通过架构比较,可以比较两个数据库定义。 比较的源和目标可以是连接的数据库、SQL 数据库项目或 .dacpac 文件的任意组合。 比较完成后,结果将显示为一组操作,使目标与源相同。 数据库模型之间的差异类似于源代码管理差异。
如果架构比较目标是 SQL 项目或数据库,则可以直接从架构比较接口更新目标,或生成具有相同效果的更新脚本。
Schema Compare 提供以下功能:
- 比较两
.dacpac个文件、数据库或 SQL 数据库项目之间的架构。 - 以一组操作的形式查看结果,以便将目标与源进行匹配。
- 选择性地排除结果中列出的操作。
- 设置控制比较范围的选项。
- 将更改直接应用于目标,或生成脚本以在以后应用更改。
- 将比较保存为文件
.scmp以供重复使用。
先决条件
- SQL Server Management Studio 22.7 或更高版本
- 数据库 DevOps 工作负荷 (仅在比较 SQL 数据库项目时才需要)
启动架构比较
可以从多个入口点打开 SSMS 中的架构比较。
对象资源管理器
右键单击 对象资源管理器 中的数据库,然后选择 Tasks>Schema Compare (预览版)。 所选数据库将自动设置为源。
解决方案资源管理器
右键单击 解决方案资源管理器 中的 SQL 数据库项目,然后选择 Schema Compare (预览版)。 所选项目将自动设置为源。
Note
若要在 解决方案资源管理器 中使用 SQL 数据库项目,需要 Database DevOps 工作负荷。
“工具”菜单
在“工具”菜单上,选择“架构比较”(预览版)。 “架构比较”窗口打开时,不带预先设置的源或目标。
选择源和目标
架构比较打开后,选择源和目标进行比较。 每个数据库可以是连接的数据库、 .dacpac 文件或 SQL 数据库项目。
- 数据库:连接到正在运行的数据库实例。 源定义是您希望用作对目标进行更改基础的数据库定义。
-
数据层应用程序(.dacpac):浏览到已
.dacpac编译的文件。.dacpac包含数据库架构的快照。 - 数据库项目:选择一个开源 SQL 数据库项目。 需要数据库 DevOps 工作负载。
目标是您想要评估并可能对其应用更改的数据库定义。
运行和查看比较
在工具栏中选择 “比较 ”以启动比较过程。
比较完成后, “结果 ”窗格会显示源和目标之间的结构差异。 比较结果按操作(如“删除”、“更改”或“添加”)对所有差异进行分组。
每一行标识源架构或目标架构(或两者)中的对象,以及进程对目标架构执行的操作,以使目标对象与源对象相同。 如果重命名对象或将其移动到新架构,则源名称和目标名称不同。 源名称以粗体显示,以突出显示差异。
默认情况下,结果列表隐藏两个架构中相同或不支持更新的对象(例如,内置对象)。 选择工具栏中的相应筛选器按钮以显示这些对象。
若要更改分组首选项,请在工具栏上选择“对结果分组”下拉列表。 选择 “类型” 以按对象类型(如表、视图或存储过程)对结果进行分组。
排除差异
默认情况下,“更新目标”操作在其范围中包含所有差异。 若要排除不想同步的差异,请清除每行的“包括”列。 该行会立即变灰。当 Schema Compare 更新目标时,不会将该行纳入任何待处理更改的考虑范围。
如果排除的行具有依赖对象(如视图行引用的表行),则会禁用排除的行,但在取消选中所有依赖行之前,不会清除其复选框。 如果重构行(例如重命名或移动到另一个架构),则该行及其依赖子行将禁用该复选框。
比较选项
在工具栏中选择 “选项” 以配置要比较的对象以及忽略哪些类型的差异。 选项包括:
- 忽略空格
- 忽略分区方案
- 忽略列顺序
还可以配置比较中包含的对象类型,例如表、存储过程、索引、权限和用户定义的类型。
应用更改
若要更新目标的架构,有两个选项:
- 应用:直接从“架构比较”窗口将更改应用到目标数据库或项目。
- Generate 脚本:生成捕获相同更改的 Transact-SQL 脚本,稍后可以查看和运行这些更改。
生成的脚本将显示在 Transact-SQL 编辑器中,你可以在其中检查和运行该脚本对数据库。
保存对比结果
可以将架构比较的比较定义保存为文件 .scmp ,称为 架构比较文件。 此文件在 XML 中存储有关比较设置的信息,并包括:
- 源和目标连接信息
- 比较选项
- 排除的对象类型
可以在 SSMS 中打开一个文件,以便稍后再次运行同一 .scmp 比较,或与他人共享比较。