我会尽力解释这一点。我目前有一个数据流任务,它有一个OLE DB Source将数据从一个表从另一个数据库传输到另一个数据库的表。它工作正常,但我遇到的问题是我不断向目标表添加重复数据。
因此在该表中多次显示'2012年11月30日'的'13029'的客户ID'$ 56.82'。如何制作它以便我只能将唯一数据传输到目标表?
答案 0 :(得分:3)
在传输数据的数据流任务中,您可以插入查找转换。在查找中,您可以指定数据源(表或查询,最适合您的方式)。选择数据源时,可以转到“列”视图并创建映射,在该映射中连接两个表的CustomerID,日期和数量。
在一般视图中,您可以配置匹配/非匹配行会发生什么。只需获取不匹配的输出并将其指向数据库目的地。
答案 1 :(得分:2)
您需要确定表中数据唯一的原因。如果它是一个客户表,那么它可能是13029的customerid。但是如果它是客户订单表,那么它可能是CustomerId和OrderDate的组合(也许不是,我在同一日期放置了两个独特的订单)。根据你桌子的设计,你会知道答案。
有了这些知识,您将需要编写一个查询来从目标表SELECT CO.CustomerId, CO.OrderId FROM dbo.CustomerOrder CO
中撤回密钥。如果您知道该流程只传输当前年份的数据,请在上面的查询中添加一个过滤器限制返回的行数。这样做的原因是节省内存 - 您希望SSIS快速运行,不要带回它永远不需要的无关列或行。
在数据流中,使用该查询添加Lookup Transformation。您没有将2005,2008或2012指定为SSIS版本,并且它们具有与查找转换相关联的不同行为。一般来说,您要做的是识别不匹配的行。根据定义,不匹配意味着它们不存在于目标数据库中,因此那些是 new 的行。 2005假设每一行都匹配或错误。您需要单击Configure Error Output ...按钮并选择“Redirect Rows”。 2008+在“指定如何处理没有匹配条目的行”下有一个选项,你需要“将行重定向到无匹配输出。”
现在取无匹配输出分支(2008+)或错误输出分支(2005)并将其连接到目的地。
此方法未涵盖的是源系统报告$ 56.82并且目标系统具有$ 22.38(更新)时的检测和处理。如果您需要处理,那么您需要查看一些变化检测系统。查看Andy Leonard的Stairway to Integration Services系列文章,了解检测和处理变更的选项。
答案 2 :(得分:0)
您是否考虑过使用T-SQL MERGE语句? http://technet.microsoft.com/en-us/library/bb510625.aspx
它将比较已定义字段上的两个表,并在匹配与否时执行操作。