自定义脚本组件SSIS,用于过滤和合并重复项

时间:2014-05-15 18:16:34

标签: c# sql-server ssis

我有一个联系人列表,其中包含来自两个不同数据库的信息,这些数据库已执行了Union All on and sorted。现在我有一个聚合列表,如下所示:

contactid   add1            add2     city     phone        fullname     source
-----      -----            -----    -----    -----         -----        ----- 
BOOG1     1598 Tree Drive  Apt:215    NYC  718-888-9989   Andrew Sample    DB1
NULL      NULL             Apt:215         718-888-9989   Andrew Sample    DB2

BOOG6     1598 Tree Drive  Apt:215    NYC  718-888-8888   Andria Toefield  DB1
NULL      NULL  Apt:215                     718-888-9888   Andria Toefield  DB2
....
....
....

基本上,我想使用一个脚本组件来比较Rows安德鲁样本,如果列是空的,那么选择一个不是,如果有数据冲突,那么从db2中选择数据作为替换它的数据。所以最终结果应如下所示:

contactid   add1            add2     city     phone        fullname  
-----      -----            -----    -----    -----         -----          
BOOG1   1598 Tree Drive   Apt:215    NYC  718-888-9989   Andrew Sample    

BOOG6   1598 Tree Drive   Apt:215    NYC  718-888-9888    Andria Toefield  
....
....
....

我不确定如何在C#中开始编写脚本。我不知道如何选择行,然后比较行中的某些列。

1 个答案:

答案 0 :(得分:1)

我不会尝试使用脚本任务 - 跨行比较太难了。

我会在名称列上添加模糊分组转换。这将添加一个_key_out列(以及其他列)。我会把结果放到SQL表中。

然后我会在_key_out列上编写一个以GROUP BY为特色的复杂SQL查询,并为每个其他列的CASE语句解析你的"缺少"和#34;冲突"要求。

一旦你将它指向任何规模的真实世界数据集,这种设计的好处将真正得到回报。毫无疑问,您会遇到上述示例中更复杂的情况,例如: DB1有2" John Smith"行和DB2有3" John Smith"行。您将能够调整模糊分组参数和/或添加辅助模糊分组以打破关系。

在此过程中,您可以查询中间SQL表中的结果,以优化对这些问题的处理。