这更像是一个“会有可能”的问题......
如果我有2个数据库,1个数据库用于旧系统(我们称之为v1.0),另一个数据库用于新系统(v2.0)。
现在让我们假设在v1.0和v2.0之间存在数据迁移,但没有映射表或文档(由于我不会进入的原因),我们需要知道数据的完整性。
是否可以编写一个脚本,该脚本可以自动将每个数据库中的表映射到检查数据的级别,并确定它是否可能匹配并生成包含结果的表?
所以你最终得到的结果是:
Source...........|Possible matches v1.0.............|v2.0............|v2.0............|v2.0 table234.columnA |table109.columnX|table63.columnY |table10.columnZ table234.columnB |table139.columnX|table13.columnY |table140.columnZ
所以你最终得到了一个源表/列以及它可能存在的所有可能的表/列。
我知道这是一个奇怪的请求,但任何人都需要做这样的事情?
答案 0 :(得分:4)
红门数据比较非常简洁,数据比较工作。您可以为比较项目选择表,列和事件添加基于行的过滤器。
http://www.red-gate.com/products/sql-development/sql-data-compare/
答案 1 :(得分:2)
您可以使用DbComparer之类的数据库比较工具。它可以帮助您解决大多数查询。它完全免费。这将帮助您了解2个数据库的数据库模式之间的差异。
要比较两个数据库版本,您可以检查this link out.您可以使用数据库比较向导来获得差异。
也可以使用名为CompareData的免费工具。
如果您想付款,可以查看SQL Data Compare 9.0
答案 2 :(得分:0)
听起来有可能。一个想法 - 您可以创建一个“映射完整性”视图,但假设此迁移将导致“版本1”数据库保持静态向前移动,您可以改为创建映射完整性表并通过存储填充一次程序。这将导致映射完整性表比查看更快查询。
答案 3 :(得分:0)
我对你问的问题的理解是,如果你在Schema 1中有一个像Customer.Country这样的字段,其中包含“美国”,“加拿大”和“墨西哥”的值,你需要一个列表模式2中的列具有值“美国”,“加拿大”和“墨西哥”。听起来不对吗?
根据我对你所询问的内容的理解,它可能在很大程度上取决于已完成的映射类型以及它的复杂程度。这里有一些例子,基于我见过的一些架构变更项目:
结合:如果Schema 1有Shoe_Customers和Boot_Customers,Schema 2将它们连接到一个Customers表中,那么找到Shoe_Customers.Customer_Name的地图就必须寻找子集 Customers.Name中的值。同样,如果Schema 1的Customers.Country已被Schema 2中的Countries通用查找表替换,并且某人填充了该表以及完整的国家/地区列表,那么您将寻找匹配Customers.Country和Countries的子集.Name(或者,它们匹配吗?)。
子集:采用相反的方法,如果Schema 1将Customers和Schema 2分解为Shoe_Customers和Boot_Customers,那么您只会在任何给定列中找到Schema 1值的子集Schema 2.我不确定你在这里如何定义成功案例。
基数:如果您正在尝试追踪相当独特的数据,例如Customer.Name,那么您通过自动化方法获得成功的可能性很高。任何基数水平较低的东西都可能会给你带来比你觉得更有价值的虚假线索。如果Gender是M或F,而Discount_Code是A-Z,Sole_Style和Heel_Style等......,那么通过自动数据匹配追踪这些数据将是一个巨大的浪费时间。数字数据会变得更糟,特别是百分比等低基数数据。
数据类型更改:我猜你是在问这个问题,因为它涉及数百或数千个列更改,包含大量数据。如果想要将所有“字符串数据”与所有其他“字符串数据”进行比较,并将所有“数字数据”与所有其他“数字数据”进行比较,那么这将是巨大的。如果模式更改排除数据类型更改(例如,不允许:Customer.Country是varchar(15),但现在Countries.Name是varchar(50)),那么您已经在任务。
这些是目前想到的事情。您的情况可能会使所有这些因素无关紧要,或者您的情况可能会将这些因素作为冰山一角。就个人而言,我对大多数情况下的全自动化方法持怀疑态度。我的建议是编写一个存储过程,它带有两个表/列名,每个模式一个,并告诉你Schema 2中Schema 1值的覆盖范围,Schema 1中Schema 2值的覆盖范围,某种基数测量等等。结合一点人的影响,你应该能够映射一些比例的列,可能在一个完整的通用解决方案中花费更少的时间来追求很多死角。
祝你好运,特里。