【发布时间】:2018-07-20 05:36:22
【问题描述】:
我创建了一个 SSIS 包,用于从名为 TmShipping 的访问表 (.mdb) 中提取数据并将其加载到 SQL 表中,例如 TmShippingImport,该 SQL 表具有 Id 和importedDate 作为附加列。我已安排该程序包每 30 分钟运行一次。
TmShipping.mds
----------------------------------------
OrderId CarrierId TotalCharge
TmShippingImport (SQL table)
-------------------------------------------------------
Id OrderId CarrierId TotalCharge importedDate
在数据流任务中:
我使用 OLD EB 连接从源获取数据并从访问表中提取所有行数据,并将其输出连接到 Recordset 目标,以便我可以提取每一行。
在控制流任务中:
我有一个循环容器(连接到数据流任务的 o/p),它通过 sql 查询将每一行插入到 sql 表中,并将所有行数据与当前日期时间一起加载。
包执行
第一次执行时,SSIS 包会将每一行加载到 SQL 表中,并将 DateTime 添加到 importDatetime 列。当在 Access 表中创建新记录时,包现在获取 MS 访问中的所有行(先前提取的行和新行)并再次将它们加载到 SQL 表中。如何避免重复?我在 SQL 表中的主键是 ID,它不在 MS Access 表中。
尝试在源和记录集目标之间的数据流中使用查找表,但失败,提示我无法将可用列连接到 BLOB。
我应该尝试在数据流中使用 Lookup Merge,还是应该在 foreachloop 容器中进行更改,以便它在将行插入 sql 表之前检查重复项还是...?
【问题讨论】:
-
Access 表是否有唯一键?
-
是的,OrderID 是 MS Access 表的唯一键。 Id 是 SQL 表中的主键。我们无法在 MS Access 表中插入新列,因为它被第三方应用程序读取。
-
那你的问题是什么?只要源数据有唯一键,就有上百篇关于如何在 SSIS 中对传入数据进行重复数据删除的文章和帖子。
标签: sql-server ms-access ssis etl sql-server-data-tools