反应数据修改
现在我们来修改一下两个数据库中的数据,然后看看这些改变是如何被表示出来的。修改数据的脚本语句如下,使用Data Dude执行脚本的步骤如下:
◆打开管理工具并新开一个查询窗口
◆运行下面的脚本:
USE AdventureWorks GO UPDATE Sales.SalesOrderDetail SET OrderQty = 3 WHERE SalesOrderDetailID = 27070 GO USE AdventureWorksTemp GO INSERT Person.ContactType (Name) VALUES ('Assistant Account Manager')
◆打开我们创建的工程,开始一个新的数据比较。
◆选择数据库“AdventureWorks”作为源,数据库“AdventureWorksTemp”作为目标。点击“完成”开始比较。
◆分析比较结果。我们可以看到“Person.ContactType”表的第一个不同之处。结果显示值“1”,说明有一条记录是目标记录,建议从目标库中删除掉这个记录。
结果显示,第二处修改在于表“Sales.SalesOrderDetail”中。尽管我们只改变了表“Sales.SalesOrderDetail”中的记录,但是,表上的触发器却同时更新了表“Sales.SalesOrderHeader”和表“Production.TransactionHistory”。
这些修改将被作为更新要求应用到目标库。
“写入更新”和“导出到编辑器”按钮现在变为可用状态. 点击“导出到编辑器”按钮,分析产生的脚本。脚本如下:
DROP CONSTRAINT and CREATE CONSTRAINT statements for all foreign keys.
DELETE statement for Person.ContactType table.
UPDATE statement for Sales.SalesOrderDetail and Sales.SalesOrderHeader tables.
INSERT statement for Production.TransactionHistory table.
返回到数据比较标签,点击“写入更新”。更新目标数据库。
查询相应的表,看看目标库中的记录是否被更新。
是不是任何记录都按照源数据库更新了呢?查看数据比较窗口顶部的消息。上面显示X条记录被比较和更新了。为了确保每一条记录都被更新,我们再次比较一下。点击数据比较工具条中的“刷新”图标,开始重新比较。现在所有的记录都是相同的吗?你会看到,在表“Order”中仍然有数据不匹配。现在我们来查找一下不匹配的原因。原来是“ModifiedDate”列出了问题。我们再次更新目标库。点击“写入更新”按钮来执行更新。刷新再比较。仍然不是所有的记录都匹配?是的,因为表“Sales.SalesOrderDetails”上设置的触发器,这种现象将一直继续。一旦执行更新操作,触发器被激发并更新了“ModifiedDate”列和“Sales.SalesOrderHeader”表。点击“关闭触发器”按钮,触发器操作将被阻止。
数据比较选项
点击数据库工具->数据比较,会显示出“首选项窗口(工具->选项)”,其中有7个选项可以不同程度的改变更新的进程。激活或者关闭这些选项可以灵活的按照你的要求来控制更新。下面分别对这7个选项做简单介绍:
关闭外键
这个选项默认情况下是激活的。所以我们能够在脚本中看到所有外键的删除和重新创建的语句。当更新和删除记录时,激活该选项会在执行时停止检查外键的可用性,而关闭该选项则会强迫检查外键的可用性。
关闭触发器
激活该选项将会阻止激活触发器. 如果在执行前面的更新操作时,激活了该选项,我们就不会看到不匹配的记录。你可以在激活该选项的情况下再执行以下前面的操作,看看结果。
删除主键,索引和唯一性约束
一旦你激活了该选项,在比较时会删除掉所有的主键,所有的索引和所有的唯一性约束。但我曾没有遇到过删除主键和聚簇索引的脚本。如果你要更新一个表,而这个表数据量很大而且拥有很沉重的索引,那么删除索引是一个很好的选择。
包含时间戳列
该选项默认是开着的。当它开着的时候,会比较时间戳列并显示时间戳是否有差异。但它不会更新目标库,也不会产生更新的脚本。关闭该选项将不会比较时间戳。
不使用事务
激活这个选项将阻止脚本在事务中执行。默认情况下它是激活的。
排除表示列
默认情况下,该选项是关闭的,因此会比较标识列的值。当激活该选项的时候,表示列的值不会被比较,也不会显示该列的不同之处。但我发现,当表示列是主键的一部分时,即使该选项被激活,也会比较标识列。
消除尾部空格
激活该选项,会在更新目标库的时候,删除列中尾部的空格。
希望到此为止我已经介绍得比较充分,而你们也能发现“数据比较”非常有用。如果你还没有使用这项功能,可以下载试用。