【问题标题】:How to insert/update rows from MySQL to SQL Server by using SSIS如何使用 SSIS 将行从 MySQL 插入/更新到 SQL Server
【发布时间】:2014-05-23 19:05:30
【问题描述】:

我正在寻找将行从 MySQL 连接插入或更新到 SQL Server 连接的最佳做法。

首先,我添加了一个 ADO.NET 数据源来抓取 MySQL 内容(一个简单的表 Supplier 具有两个字段 id 和 name)。然后,我添加了一个查找转换来拆分新行/更新的行。当我需要插入新行时它工作得很好。但是,我想使用 Command OLE DB 来更新现有行,但由于我的连接管理器和组件(ADO.NET 与 OLE DB)之间的不兼容,它不起作用。

有更新修改行的想法吗?!我应该使用缓存组件吗?!

提前致谢!

【问题讨论】:

  • 这篇文章解释了如何使用 SSIS 将数据从 SQL Server 更新到 MySQL。但是,由于连接器(ADO.NET / OLE DB)的限制,从 MySQl 导入到 SQL Server 的过程比从 SQL Server 导入到 MySQL 更复杂。
  • 你不能反过来做同样的事情吗?为暂存表中的 SQL Server 数据库使用 OLE DB 目标连接,然后对最终表运行 UPDATE 或 MERGE?
  • 好的。因此,首先我需要创建一个新的 SQL Server 连接来存储我的临时表,然后将匹配的行输出(查找组件的)连接到一个新的目标 OLE DB 组件(链接到我的临时表)。其次,我需要添加一个新的数据流来读取临时表,执行 OLE DB 命令来更新内容。但是,我不明白如何将这些链接到步骤。我应该创建两个数据流并添加优先级约束以在导出之前执行导入吗?此外,如何使用 SSIS 创建临时表并在最后完成 troncate ?谢谢。

标签: mysql sql-server ssis ado.net


【解决方案1】:

只需同时摆脱查找和条件拆分。

在您的 SSIS 包之外,构建一个临时表,其中包含插入/更新所需的字段。

在您的 SSIS 包中,创建执行以下操作的控制流:

  • 执行 SQL 任务以截断临时表。
  • 将 MySQL 数据从源系统加载到临时表的数据流任务。如果您可以基于“仅更改”类型的流程来执行此操作,例如使用您检查的时间戳,那会更快。
  • 执行 SQL 任务以使用连接到目标表的临时表对目标表执行 UPDATE 语句。
  • 执行 SQL 任务以使用基于目标表和暂存表的查询在目标表上执行 INSERT 语句(在键字段上使用 WHERE NOT EXISTS 或类似的)

【讨论】:

    【解决方案2】:

    我会更改 SQL 连接以使用 OLE DB。除了允许 OLE DB 命令工作之外,您还可能会发现 OLE DB Destination 更快。

    【讨论】:

    • 似乎使用 OLE DB 命令的唯一方法是更改​​为 OLE DB 数据源。但是,MySQL 与 OLE DB 数据源不兼容。这就是我使用 ADO.NET 源从 MySQL 获取数据的原因。
    猜你喜欢
    • 2019-08-16
    • 1970-01-01
    • 2014-06-16
    • 2011-01-04
    • 2012-06-16
    • 1970-01-01
    • 1970-01-01
    • 2017-12-17
    • 1970-01-01
    相关资源
    最近更新 更多