SSIS不存在于一个数据流中

时间:2015-09-01 00:05:31

标签: ssis match lookup not-exists

我正在尝试在SSIS中实现以下目标:

Union所有6个单独的SQL查询(OLE DB源)(调用此数据集A) 数据集A包含

id Col A Col B......
1
2
3
4
5
6
7
8

我有另一个包含

的OLE DB源SQL查询(数据集B)
id Col A Col B .......
1
2
3
4
10
11
12

所有查询中的所有列Col A,Col B等都相同。

我想返回数据集A联合(UNION ALL)与数据集B,其中数据集B中的ID与数据集A中的ID不匹配。即

id Col A Col B......
1
2
3
4
5
6
7
8
10
11 
12

在执行UNION之前,还需要对数据集B进行一些额外的工作来填充列中的NULL值。

通过将数据集A插入到表中,然后在后续的NOT EXISTS或类似查询中使用此表来获取缺少的信息,然后将UNIONing放在一起,我可以非常轻松地实现此目的。理想情况下,虽然我想在一次扫描中使用双组播进行此操作,一方进入查找无匹配,另一方直接进入目标表。

不幸的是,Lookup和No Match输出返回'错误'的缺失数据,即返回

5
6
7
8

而不是

10
11
12

这是因为查找(数据集B)和源数据(数据集A)是“错误的方式”。我不想将数据集A重写为Lookup查询,那么使用不同的转换或其他方法是否有另一种解决方法?

我已尝试使用缓存转换,但它似乎与查找转换在同一数据流中工作,因为存在读/写争用。

谢谢, 丰富。

1 个答案:

答案 0 :(得分:1)

听起来你想要一个"富勒外部加入"有点"合并"组件,然后事后有点手动合并。如果我误解了你,你总是可以在合并后添加条件分割,过滤A是否为空,B是否为空等等。

http://i.stack.imgur.com/dC2Hx.png

"合并列的示例"正在创造一个重复的" Id"用这个表达式:" ISNULL(Id_A)? Id_B:Id_A"

"完全外部加入的示例 - 合并":enter image description here