【问题标题】:Unorthodox copy table data from one table to another非正统的将表数据从一张表复制到另一张表
【发布时间】:2015-12-30 00:42:42
【问题描述】:

我的情况是,我在 2 个不同的数据库中有 [大部分] 匹配表。表模式通常是相同的,但有时会发生变化(列添加、重命名、删除)。在以下情况下,我需要将数据从 Source 复制到 Destination:

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

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

【问题讨论】:

  • 我将使用 ADO.NET 在 C# 中编写自己的逻辑,以复制源表和目标表中列的交集。其他要求也可以用同样的方式满足。你可以找出键是什么。也许您需要为某些匹配手动设置映射并将它们保存在 XML 中。这看起来很有趣。
  • 为什么不使用 SSIS(SQlserver 集成服务)?然后在作业中使用它,以便您也可以安排它。它具有您在此处列出的所有功能。
  • 我会为此使用 Access,以便能够使用 SQL 在 Access 和 MSSQL 之间传输数据。 链接源表和目标表,获取匹配列的列表,从中构建 INSERT 语句并运行它。非常简单。

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


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多