【问题标题】:SSIS Not Exists In One Data FlowSSIS 不存在于一个数据流中
【发布时间】:2015-11-26 02:28:04
【问题描述】:

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

联合所有 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 与数据集 B 联合(UNION ALL),其中数据集 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 或类似查询中使用该表来获取丢失的信息,然后将它们联合在一起。理想情况下,虽然我想在一次扫描中使用双组播进行此操作,一侧进入查找不匹配,另一侧直接进入目标表。

不幸的是,查找和无匹配输出返回“错误”的缺失数据,即它返回

5
6
7
8

而不是

10
11
12

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

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

谢谢, 丰富。

【问题讨论】:

    标签: ssis match lookup not-exists


    【解决方案1】:

    听起来您想要一个“Fuller Outer Join”类型的“Merge”组件,然后在事后进行手动合并。如果我误解了你,你总是可以在 Merge 之后添加一个 Conditional Split 来过滤 A 是否为空、B 是否为空等。

    “合并列”的一个示例是使用以下表达式创建重复的“Id”:“ISNULL(Id_A) ? Id_B : Id_A”

    “完全外部连接 - 合并”的示例:

    【讨论】:

    • 感谢您的快速回复。我假设我可以在 Lookup 中选择驱动数据集并简单地使用 No Match Output。你的方法很棒,但对我的需要来说有点过分了。我只需将数据集 A 插入结果表,然后将该结果表用作与数据集 B 的另一个查询的一部分,然后合并 2。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多