演练:比较两个数据库的数据

本主题适用于:

Visual Studio 旗舰版

Visual Studio 高级专业版

Visual Studio 专业版 

Visual Studio 学习版

主题适用 主题适用 主题不适用 主题不适用

在本演练中,您将比较两个数据库的数据,根据差异生成数据操作语言 (DML) 脚本,然后使用该脚本用源数据库中的数据填充目标数据库。

您将遵循本演练中的以下过程:

  • 向源数据库添加数据。 在此过程中,您将使用 Transact-SQL 编辑器向源数据库的 Customer 表中添加数据。

  • 比较两个数据库的数据。 在此过程中,您将找出数据中的差异,将其显示在网格中,然后生成表示这些差异的 DML 脚本。

  • 更新目标数据库。 在此过程中,您会看到有两种方法可用来更新目标数据库以使其与源数据库匹配。

系统必备

您必须具有对以下产品的访问权,然后才能完成此演练:

  • SQL Server 2008

  • Visual Studio 高级专业版或 Visual Studio 旗舰版

在开始此演练之前,您必须按照演练:比较两个数据库的架构中的各个步骤操作。 完成此演练后,您将得到以下两个数据库:

  • 源数据库 CompareProjectDB 具有其原始结构,但不包含任何数据。 您可以自定义项目以将数据作为后期部署脚本的一部分插入到数据库中。

  • 目标数据库 EmptyDB 是在演练中创建的用于比较架构的数据库。 然后仅将 AdventureWorks2008 数据库的架构应用于 EmptyDB。 因此,EmptyDB 中不包含任何数据。

您必须具有从源数据库和目标数据库读取数据的权限。

向源数据库添加数据

使用 Transact-SQL 编辑器将数据添加到源数据库

  1. 在**“数据”菜单上,指向“Transact-SQL 编辑器”,再单击“新建查询连接”**。

  2. 指定与 CompareProjectDB 所在的服务器的连接。

  3. 在 Transact-SQL 编辑器中键入以下 Transact-SQL 语句:

    use CompareProjectDB;
    go
    delete from [Sales].[Customer];
    go
    exec [Sales].[uspNewCustomer] 'Ken J. Sánchez'
    exec [Sales].[uspNewCustomer] 'Terri Lee Duffy'
    exec [Sales].[uspNewCustomer] 'Roberto Tamburello'
    exec [Sales].[uspNewCustomer] 'Rob Walters'
    exec [Sales].[uspNewCustomer] 'Gail Erickson'
    exec [Sales].[uspNewCustomer] 'Jossef Goldberg'
    exec [Sales].[uspNewCustomer] 'Dylan Miller'
    exec [Sales].[uspNewCustomer] 'Diane Margheim'
    exec [Sales].[uspNewCustomer] 'Gigi Matthew'
    go
    
  4. 在**“Transact-SQL 编辑器”工具栏上,单击“执行 SQL”**。

    Transact-SQL 语句将从 [Sales].[Customer] 表中删除现有的任何数据,然后使用 [Sales].[uspNewCustomer] 存储过程来添加九位客户。 现在,您的源数据库中已经包含数据,可以将源数据库与目标数据库进行比较了。

比较两个数据库的数据

比较两个数据库的数据

  1. 在**“数据”菜单上,指向“数据比较”,然后单击“新建数据比较”**。

    将出现“新建数据比较”向导。 此外,“数据比较”窗口会在后台打开,Visual Studio 会自动为其分配一个名称,如 DataCompare1。

  2. 在**“源数据库”**列表中,单击与 CompareProjectDB 数据库的连接。

    如果**“源数据库”列表为空,则单击“新建连接”。 在“连接属性”对话框中,标识 CompareProjectDB 数据库驻留的服务器以及连接该数据库时要使用的身份验证类型。 然后,单击“确定”关闭“连接属性”**对话框并返回到“新建数据比较”向导。

  3. 在**“目标数据库”**列表中,单击“Server.EmptyDB.dbo”。

    如果**“目标数据库”列表为空,则单击“新建连接”。 在“连接属性”对话框中,标识 EmptyDB 数据库驻留的服务器以及连接该数据库时要使用的身份验证类型。 然后,单击“确定”关闭“连接属性”**对话框并返回到“新建数据比较”向导。

    如果想要限制比较结果中显示的记录,可以指定“数据比较选项”。 对于此演练,请接受默认设置以显示所有记录。

  4. 单击**“下一步”**。

    在“新建数据比较”向导的第二页,可以进一步调整对要比较的表和视图的选择。 数据库的所有的表都列在**“表”**节点下。 您可以展开各个表以显示它们包含的列。 默认情况下,将显示所有的表和列,并对其进行比较。 将为列表中的每个表或视图显示用于比较记录的键。 表和视图必须满足特定条件才能进行比较。 有关更多信息,请参见将一个或多个表中的数据与引用数据库中的数据进行比较和同步

    提示

    如果您不想对比较哪些表和视图进行自定义,则可以单击“完成”而不是“下一步”

  5. 单击**“完成”**,开始比较。

    比较开始。

    提示

    通过单击“数据比较”工具栏上的“停止”,可以停止正在进行的数据比较。

    比较完成后,两个数据库之间的数据差异将出现在“数据比较”窗口的表中。 有关如何查看这些结果的更多信息,请参见下面的过程。

    现在可以更新目标数据库中的数据以使其与源数据库中的数据匹配。 有关更多信息,请参见更新目标数据库。

查看数据比较结果

  1. 单击**“[Sales].[Customer]”**行。

    在“记录视图”窗格中,选项卡的名称将会发生更改以反映每种类型的记录的数目:“不同的记录(0)”“只在源中(9)”“只在目标中(0)”“相同的记录(0)”

  2. 单击**“只在源中(9)”**选项卡。

    在**“只在源中(9)”选项卡上,每一行和每一列都与“[Sales].[Customer]”**表中的一行或一列相对应。

    提示

    您可以使用这些选项卡控制传播到目标数据库的数据。

更新目标数据库

可以直接从“数据比较”窗口更新目标数据库中的数据,也可以通过使用 Transact-SQL 编辑器进行更新。 本节对这两种方法进行介绍。

比较数据后,差异会显示在“数据比较”窗口的网格中。 对于**“对象”列中的每个表或视图,都有一个指示该对象是否包括在更新操作中的复选框。 这些列显示数据比较指示了哪些类型的哪些更改。 在本例中,由于目标数据库中除默认对象外均为空,所以只有“只在源中”**列显示将进行的更改。

通过使用数据比较选项写入更新

若要使用“数据比较”窗口中显示的更新操作更新目标数据库中的数据,请使用下面的过程:

  • 更新目标数据库

通过使用 Transact-SQL 编辑器写入更新

若要导出、检查和更改更新脚本然后使用该脚本更改目标数据库,请使用下面的过程:

  • 检查和运行同步脚本

更新目标数据库

更新目标数据库

  1. 在“数据比较”窗口中,单击**“[Sales].[Customer]”**。

  2. 在详细信息窗格中,单击**“只在源中”**。

    前两行显示的是分别名为 Ken J. Sánchez 和 Terri Lee Duffy 的客户的信息。

    详细信息窗格的状态栏上指出了源数据库中缺失的记录数以及将从目标数据库中删除的记录数。 这两个数字是相同的。

  3. 清除 Terri Lee Duffy 行中的复选框。

    在详细信息窗格的状态栏上,要插入的记录数已经减一。 它与目标中缺失的记录数不再匹配。

  4. 在“数据比较”窗口中,单击**“写入更新”**。

    便会实现“数据比较”窗口中列出的更新操作。 此同步会更改目标以便与源匹配。

    提示

    更新目标时,可以通过单击“停止写入目标”取消该操作。

检查和运行同步脚本

检查同步脚本

  1. 在“数据比较”工具栏中,单击**“导出到编辑器”**。

    Transact-SQL 编辑器将在连接模式下打开并显示 Transact-SQL 脚本。 此窗口的名称类似于 DataUpdate_EmptyDB_1.sql。 由于您具有此窗口的写入访问权限,因此可以更改脚本。 如果要保存更新脚本,请单击**“保存”**。

  2. 若要同步两个数据库的数据,请通过单击**“执行 SQL”**或按 F5 运行此脚本。

    提示

    在此脚本运行期间,可以通过单击“取消查询执行”或按 Alt + Break 取消该操作。

请参见

任务

如何:比较数据库架构

如何:比较并同步两个数据库的数据

概念

比较和同步数据库架构