【问题标题】:SSIS Lookup Transformation No Match Output Only Populates NullSSIS 查找转换无匹配输出仅填充 Null
【发布时间】:2020-10-08 13:41:10
【问题描述】:

我正在尝试使用查找转换,但似乎无法从中获得我需要的功能。我有两个结构完全相同的表

临时表(输入):较小的表,但可能有其他表中不存在的条目 参考查找表:可能与临时表没有相同条目的较大表。

我正在尝试将临时表的条目与参考查找表的条目进行比较。 Temp Table 中存在的任何内容,但 Lookup 中不存在的任何内容都应输出到单独的表中(无匹配输出)。

这是一个非常简单的数据流,但似乎无法正确完成查找。它将找到“不匹配”行,但“不匹配”表中的每一列都填充了空值。我想弄清楚为什么数据会失去它的价值?

如何设置查找:

【问题讨论】:

    标签: ssis


    【解决方案1】:

    临时表中的数据是驱动数据流的动力。 151 行从中流出。

    您的查找将根据您指定的任何条件进行匹配,并且您已确定如果不匹配,我想将不匹配的数据推送到表中。

    由于查找任务无法将列添加到不匹配的输出路径,这意味着您的源(临时表)开始全面为 NULL。

    将数据查看器/data tap 拖放到查找和目标之间的数据流中,然后将该数据与您的源进行比较。我怀疑你会发现填充 Temp 表的进程有问题。

    在查找转换的列选项卡中,您已确定要使用引用表中的值来替换源中的值。

    在您遇到不匹配之前,这很有效。在这种情况下,无论是否匹配,组件都会执行更新该列的非直观操作(即使对我使用了 15 年以上)。

    来源查询

    SELECT 21 AS tipID,  NULL AS tipYear
    UNION ALL SELECT 22, 2020
    UNION ALL SELECT 64263810, 2020
    

    这会在我的数据流中添加三行,第一行没有tipYear,接下来的两行是 2020 年。下图中的标记 1

    查询查询

    SELECT 
    *
    FROM
    (
        values (20, 1111), (21, 2021), (22, 2022)
    )D(tipID, tipYear)
    

    此参考数据将为所有比赛(21 和 22)提供一年。在匹配的路径中,我们将看到 21 提供了一个值,而 22 将更新其年份。图片中的图章 2

    但是,对于 id 64263810,将找不到匹配项,我们将看到 2020 的初始值替换为匹配的行,即 NULL。邮票 3

    经验教训。如果您需要使用引用表中的数据但输出路径不匹配,请不要替换查找转换中的列(除非您的意图是清除数据)

    【讨论】:

    • 查找不匹配输出中没有定义列。当我定义它们时,它们现在为字符串填充为空白(非空),为数字填充“0”。由于临时表已正确填充,因此对数据如何丢失感到非常困惑。
    • 我已经添加了 Lookup 的屏幕截图,这个设置是否会删除所有内容?
    • 恭喜你今天教了我一些关于 SSIS 的知识。替换列的“不匹配”行为与它所说的一样,但不是我所期望的。
    • 嗯嗯,我猜那是个意外!我似乎无法设置查找。如果我没有像上图那样设置它,我会收到以下错误:Validation error. Compare Excel Sheet to Database for Missing Entries: Compare Excel Sheet to Database for Missing Entries: The lookup transform must contain at least one input column joined to a reference column, and none were specified. You must specify at least one join column。就像你上面说的,如果我试图捕捉我所有的不匹配,那么它就无法像我拥有的​​那样设置。
    猜你喜欢
    • 2023-03-19
    • 2015-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多