非正统的将表数据从一个表复制到另一个表

时间:2015-12-30 00:42:43

标签: c# sql sql-server ms-access c#-4.0

我的情况是我[主要]在两个不同的数据库中匹配表。表模式通常是相同的,但有时会更改(列添加,重命名,删除)。我需要在以下条件下将数据从Source复制到Destination:

  • 尝试将所有行从源插入到目标。没有更新。
  • 唯一约束会导致重复插入失败 - 这没关系
  • 如果源与dest之间的列不完全匹配,则insert必须仍然成功。是的,这是棘手的部分。列匹配的地方,需要根据匹配的模式插入。可以跳过并忽略任何新建/删除/重命名的列,但总体插入必须成功。
  • 源可能是Access或MSSQL,Dest可能是Access或MSSQL,因此任何sql都必须适用于这两种。
  • 这不是一次性的事情。它是软件/数据升级过程的一部分,它将为许多客户反复出现,具有不同的数据集和不同的表。但同样,大多数列将始终匹配(表名在两侧始终相同,具有类似的架构),偶尔会出现列差异和唯一约束。
  • 由于唯一约束违规而导致插入失败(这意味着存在重复记录)。
  • 由于列不匹配导致插入失败是不正确的 - 我需要找到一种尽可能匹配的方法。可以跳过/忽略不匹配的列。
  • 不幸的是,表模式设计得不是很好,因此表没有int主键。许多表具有多列键,但不能使用这些键,因为源中的任何表可能需要复制到目标中的任何表。因此,对密钥的依赖是行不通的。
  • 我正在使用Visual Studio 2015和最新的c#。 SQL Server和Access。

这是一个奇怪的场景,但我需要一种强大的方法来处理它。我不在乎它是否是一个丑陋的黑客,它只需要工作。谁能想到一个好方法呢?

1 个答案:

答案 0 :(得分:-1)

几年前我做过一个项目,我面临着同样的挑战。在我的情况下,一个月中有多个远程商店处于脱机状态(没有互联网连接),并且每两周需要连接到互联网并同步数据在其本地数据库和总部数据库之间。 基本上,他们首先必须将其本地数据发送到总部,然后才需要接收总部更改。 如果您没有大数据(在我的情况下,数据库有600多个表并且大约有6000万行),则可以先将客户端数据发送到服务器并与现有数据合并,然后可以删除客户端表并从服务器中批量插入新数据