如何:比较并同步两个数据库的数据
本主题适用于:
Visual Studio 旗舰版 |
Visual Studio 高级专业版 |
Visual Studio 专业版 |
Visual Studio 学习版 |
---|---|---|---|
通过使用 Visual Studio,可以对两个数据库中包含的数据进行比较。 比较的数据库分别称为“源”和“目标”。
提示
数据库项目和数据层应用程序项目不包含任何数据。 因此,这两种类型的项目都不能作为数据比较中的源或目标。 类似地,.dbschema 文件和 .dacpac 也不包含数据,同样不能作为数据比较中的源或目标。
在比较数据时,将会生成数据操作语言 (DML) 脚本,您可以使用该脚本通过更新目标数据库中的部分或全部数据来同步不同的数据库。 完成数据比较后,结果会出现在 Visual Studio 的“数据比较”窗口中。
比较结束后,可以执行其他步骤:
可以查看两个数据库之间的差异。 有关更多信息,请参见查看数据差异。
可以更新部分或所有目标,以便与源相匹配。 有关更多信息,请参见同步数据库数据。
有关更多信息,请参见将一个或多个表中的数据与引用数据库中的数据进行比较和同步。
提示
还可以比较两个数据库的架构或同一数据库的两个版本的架构。 有关更多信息,请参见如何:比较数据库架构。
比较数据库数据
使用“新建数据比较”向导比较数据
在**“数据”菜单上,指向“数据比较”,然后单击“新建数据比较”**。
将出现“新建数据比较”向导。 而且,会打开“数据比较”窗口,并且 Visual Studio 会自动为其指定一个名称,如 DataCompare1。
标识源数据库和目标数据库。
如果**“源数据库”列表或“目标数据库”列表为空,请单击“新建连接”。 在“连接属性”对话框中,标识数据库所驻留的服务器以及连接数据库时将要使用的身份验证的类型。 然后,单击“确定”关闭“连接属性”**对话框并返回到“数据比较”向导。
在“数据比较”向导的第一页上,验证每个数据库的信息均是正确的,指定要在结果中包括的记录,然后单击**“下一页”**。 “数据比较”向导的第二页将出现并显示数据库中表和视图的层次结构列表。
选中要比较的表和视图所对应的复选框。 或者可以展开数据库对象的节点,然后选中要比较的对象中的列所对应的复选框。
提示
表和视图必须满足两个条件才会出现在列表中。 第一个条件是,源数据库对象和目标数据库对象的架构必须匹配。 第二个条件是,该列表中仅显示具有主键、唯一键或索引的表和视图。 如果没有同时满足这两个条件的表或视图,则该列表将为空。
如果存在多个键,可以使用**“比较键”**列指定要作为数据比较依据的键。 例如,可以指定使数据比较依据主键列还是依据其他(唯一可标识)键列。
单击**“完成”**。
比较开始。
提示
通过打开“数据”菜单,单击“数据比较”,再单击“停止数据比较”,可以停止正在进行的数据比较操作。
完成比较后,可以查看两个数据库之间的数据差异。 还可以更新目标数据库中的部分或全部数据,以与源数据库中的数据匹配。
使用 Visual Studio 自动化模型比较数据
打开**“视图”菜单,指向“其他窗口”,然后单击“命令窗口”**。
在命令窗口中,键入下面的命令:
Data.NewDataComparison /SrcServerName sServerName /SrcDatabaseName sDatabaseName /SrcUserName sUserName /SrcPassword sPassword /SrcDisplayName sDisplayName /TargetServerName tServerName /TargetDatabaseName tDatabaseName /TargeUserName tUserName /TargetPassword tPassword /TargetDisplayName tDisplayName
将占位符(sServerName、sDatabaseName、sUserName、sPassword、sDisplayName、tServerName、tDatabaseName、tUserName、tPassword 和 tDisplayName)替换为源数据库和目标数据库的对应值。
如果未指定源和目标,则将显示**“新建数据比较”**对话框。 有关 Data.NewDataComparison 命令的参数的更多信息,请参见 Visual Studio 数据库功能的自动化命令参考。
对指定的源数据库和目标数据库中的数据进行比较。 结果将显示在“数据比较”会话中。 有关如何查看结果或同步数据的更多信息,请参见查看数据差异和同步数据库数据。
查看数据差异
在对两个数据库中的数据进行比较之后,“数据比较”窗口会列出所比较的每个数据库对象及其状态。 您还可以查看每个对象内按状态分组的记录的结果。 有关状态指定的更多信息,请参见将一个或多个表中的数据与引用数据库中的数据进行比较和同步。
查看差异后,可以更新目标,以便为某些或所有不同的、缺少的或新的对象或记录匹配源。 有关更多信息,请参见同步数据库数据。
查看数据差异
比较源数据库和目标数据库中的数据。 有关更多信息,请参见比较数据库数据。
(可选)执行下列一项或两项操作:
默认情况下,会显示所有对象的结果,而无论其状态如何。 若要仅显示具有特定状态的那些对象,请单击**“筛选”**列表中的选项。
若要查看特定对象内的记录的结果,请在主结果窗格中单击该对象,再单击“记录视图”窗格中的选项卡。 每个选项卡都显示该对象内具有特定状态的所有记录:不同、只在源中、只在目标中以及相同。 数据以记录和列的形式显示。
同步数据库数据
比较两个数据库中的数据之后,通过更新全部或部分目标与源匹配,可以同步两个数据库中的数据。 可以比较两种数据库对象中的数据:表和视图。
使用“写入更新”命令更新目标数据
比较源数据库和目标数据库中的数据。 有关更多信息,请参见比较数据库数据。
比较结束后,“数据比较”窗口列出比较对象的结果。 有关不相同的对象的信息显示在四个列(分别名为“不同的记录”、“只在源中”、“只在目标中”和“相同的记录”)中。 对于每一个这样的对象,这些列显示不相同的记录数以及一个更新操作将更改的记录数。 这两个数字开始是一致的,但可以在步骤 4 中更改要更新的对象。
有关更多信息,请参见将一个或多个表中的数据与引用数据库中的数据进行比较和同步。
在“数据比较”窗口的表中,单击一行。
详细信息窗格显示所单击的数据库对象中的记录结果。 记录在选项卡上按状态分组,可用来指定将从源传播到目标的数据。
在详细信息窗格中,单击名称包含非零 (0) 数字的选项卡。
**“只在目标中”表的“更新”**列包含可用于选择要更新的行的复选框。 默认情况下,每个复选框都是选中的。
清除不希望用源数据更新的目标记录的复选框。
清除复选框会减少要更新的记录数,显示内容也会根据操作更改。 该数字显示在详细信息窗格的状态行和主结果窗格中的对应列中,如步骤 1 中所述。
(可选)单击**“导出到编辑器”**。
Transact-SQL 编辑器窗口打开,并显示将用于更新目标的数据操作语言 (DML) 脚本。
若要同步不同的、缺少的或新的记录,请单击**“写入更新”**。
提示
更新目标数据库时,可以通过单击“停止写入目标”取消该操作。
目标中的所选记录的数据用源中对应记录的数据进行更新。
提示
选择更新索引视图时,如果“写入更新”操作会在同一个表中插入重复键,则此操作会失败。
使用 Transact-SQL 脚本更新目标数据
比较源数据库和目标数据库中的数据。 有关更多信息,请参见比较数据库数据。
比较结束后,“数据比较”窗口会列出已进行比较的对象。 有关更多信息,请参见将一个或多个表中的数据与引用数据库中的数据进行比较和同步。
(可选)在详细信息窗格中,清除目标中您不希望更新的记录的复选框,如上一过程中所述。
单击**“导出到编辑器”**。
将在一个新窗口中显示 Transact-SQL 脚本,该脚本将传播必要的更改以使目标中的数据与源中的数据相匹配。 新窗口的名称类似于**“Server.Database - DataUpdate_Database _1.sql”**。
该脚本反映您在详细信息窗格中所做的更改。 例如,您可能清除了 [dbo].[Shippers] 表的“只在目标中”页中某一给定行的复选框。 这种情况下,脚本不会更新该行。
(可选)在**“Server.Database - DataUpdate_Database _1.sql”**窗口中编辑该脚本。
(可选,但建议这样做)备份目标数据库。
单击**“执行 SQL”**或按 F5 更新目标数据库。
指定到要更新的目标数据库的连接。
重要事项 默认情况下,更新在一个事务范围内进行。 如果出现错误,可以回滚整个更新。 可以更改此行为。 有关更多信息,请参见如何:设置在比较数据库数据时使用的选项。
目标中的所选记录的数据用源中对应记录的数据进行更新。