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