首页 文章

SSIS 2008.仅在数据不重复时才将数据从一个表传输到另一个表

提问于
浏览
1

我会尽力解释这一点 . 我目前有一个数据流任务,它有一个OLE DB Source将数据从一个表从另一个数据库传输到另一个数据库的表 . 它工作正常,但我遇到的问题是我不断向目标表添加重复数据 .

因此,该日期为'2012年10月31日'的'13029'的客户ID为'$ 56.82',可多次出现在该表中 . 我该如何制作,以便只能将唯一数据传输到目标表?

3 回答

  • 2

    在数据流任务中,您可以在其中传输数据,您可以插入查找转换 . 在查找中,您可以指定数据源(表或查询,最适合您的方式) . 选择数据源时,可以转到“列”视图并创建映射,在该映射中连接两个表的CustomerID,日期和数量 .

    在一般视图中,您可以配置匹配/非匹配行会发生什么 . 只需获取不匹配的输出并将其指向DB目标 .

  • 3

    您需要确定表中数据唯一的原因 . 如果它是一个客户表,那么它可能是13029的customerid . 但是如果它是客户订单表,那么它可能是CustomerId和OrderDate的组合(也许不是,我在同一日期放置了两个独特的订单) . 根据您 table 的设计,您将了解答案 .

    有了这些知识,您将需要编写一个查询以从目标表中撤回密钥 SELECT CO.CustomerId, CO.OrderId FROM dbo.CustomerOrder CO 如果您知道该进程仅传输当前年份的数据,请在上述查询中添加一个过滤器以限制返回的行数 . 这样做的原因是内存保护 - 您希望SSIS快速运行,不要带回它永远不需要的无关列或行 .

    在数据流中,使用该查询添加Lookup Transformation . 您不必存在于目标数据库中,因此这些是新的行 . 2005假设每一行都匹配或错误 . 您需要单击配置错误输出...按钮并选择"Redirect Rows" . 2008年有一个选项"Specify how to handle rows with no matching entries",你会想要"Redirect rows to no match output."

    现在取No match输出分支(2008)或错误输出分支(2005)并将其连接到目的地 .

    这种方法无法了解有关检测和处理变更的选项的一系列文章.Page 1314611_ s _1342612系列文章 .

  • 0

    您是否考虑过使用T-SQL MERGE语句? http://technet.microsoft.com/en-us/library/bb510625.aspx

    它将比较已定义字段上的两个表,并在匹配与否时执行操作 .

相关问题