0

如何从 TableA 中获取不在 TableB 中的所有行,其中 TableA 的架构与 TableB 不同(它们是来自不同 dbms 的不同类型的 DataTable 类)?

在此处输入图像描述 在此处输入图像描述

我需要所有不在ascountry中的 -rows 。country_idCountryidCountry

这不起作用,因为它们具有不同的架构(src.country并且dest.Country是不同的 DataTable 类):

Dim srcNotInDest = src.country.Except(dest.Country)

src并且dest是强类型数据集

注意:不一定VB.NET

我假设我需要提供IEqualityComparer第二个参数,但不知道如何。也许还有另一种(更快的)方法来识别新行。

背景

我正在将表从 MySQL 数据库导入 SQL-Server 数据库。只检查主键而不比较行的内容就足够了。尽管此示例表仅包含几行,但两个表包含约 100000 行,因此性能对同步源和目标很重要。

4

1 回答 1

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,在另一个表中读取 100,000(诚然在同一个 sql 数据库中)并比较它们需要 0.4 秒。当然,还有其他因素需要考虑,例如 sql server 上的负载等。

于 2011-07-16T10:13:10.207 回答