如何从TableA中获取不在TableB中的所有行,其中TableA的模式与TableB不同(它们是来自不同dbms的不同类型的DataTable类)?
我需要所有country
- country_id
不在Country
的行idCountry
。
这不起作用,因为它们具有不同的架构(src.country
和dest.Country
是不同的DataTable类):
Dim srcNotInDest = src.country.Except(dest.Country)
src
和dest
是强类型数据集
注意:不必然 VB.NET
我认为我需要提供IEqualityComparer
作为第二个参数,但不知道如何。也许还有另一种(更快)的方法来识别新行。
背景:
我正在将表从MySQL数据库导入到SQL-Server数据库中。仅检查主键并且不比较行的内容就足够了。虽然此示例表仅包含少量行但两个表包含~100000行,因此性能在同步源和目标时很重要。
答案 0 :(得分:1)
如果它们是不同的数据库,我认为您需要单独检索ID并在内存中进行比较,例如(在C#语法中)
var t1 = (from r in src.country select r.country_id).ToList();
var t2 = (from r in dest.Country select r.idCountry).ToList();
var missing = t1.Except(t2);
性能在同步源
方面很重要
如果这是一次性迁移过程,那么即使这个例程需要几秒钟才可以接受。但你提到'同步',所以我认为这不是一次性的,所以这是否可以接受取决于它的运行频率。
快速测试我的机器在一个表中读取200,000,在另一个表中读取100000(确实在同一个sql数据库中)并比较它们需要0.4秒。当然,还有其他因素需要考虑,例如sql server上的负载等。