首页 文章

从MS Access中提取数据并将其加载到SQL db时,在SSIS中处理重复项

提问于
浏览
0

我创建了一个SSIS包,用于将名为TmShipping的访问表(.mdb)中的数据提取并加载到SQL表中,例如TmShippingImport,此SQL表具有Id和importedDate作为附加列 . 我已安排包裹每30分钟运行一次 .

TmShipping.mds
----------------------------------------
OrderId   CarrierId    TotalCharge


TmShippingImport (SQL table)
-------------------------------------------------------
Id   OrderId   CarrierId    TotalCharge     importedDate

In the Data Flow Task:

我使用OLD EB连接从源获取数据并从访问表中提取所有行数据,并将其输出连接到Recordset Destination,以便我可以提取每一行 .

In the Control flow task:

我有一个循环容器(连接到数据流任务的o / p),它通过sql查询将每一行插入到sql表中,并加载所有行数据和当前日期时间 .

Package execution

第一次执行时,SSIS包将 each row 加载到SQL表中,并将一个DateTime添加到imporatDatetime列 . 在Access表中创建新记录时,程序包现在获取MS访问中的所有行(先前提取的行和新行)并再次将它们加载到SQL表中 . 如何避免重复?我在SQL表中的主键是ID,它在MS Access Table中不存在 .

尝试使用源数据集和记录集目标之间的数据流中的查找表,但它无法说我无法将可用列连接到BLOB .

我应该在数据流中尝试使用Lookup Merge,还是应该在foreachloop容器中进行更改,以便在将行插入sql表或...之前检查重复项?

1 回答

  • 0

    首先,您将数据插入SQL表的方法似乎非常昂贵 . 有没有理由不能简单地使用DataFlow目标将数据插入到数据流中的SQL表中,它会更加高效 .

    如果你没有这样做的原因是由于时间戳,你可以使用派生列转换和GetDate()来实现这一点 .

    完成后,您可以实现答案选项卡linked中使用的模式 .

相关问题