【问题标题】:How to add an extra column to handle error message in a SSIS data flow?如何添加额外的列来处理 SSIS 数据流中的错误消息?
【发布时间】:2014-11-27 10:17:07
【问题描述】:

我正在处理一个 SSIS 项目,以便在 SQL Server 数据库中导入调用行(Excel 文件)。

这是我的数据流:

我添加了一些查找以在导入过程之前检查行。 第一个检查该行是否已经存在(防止重复,因为用户将导入文件拖放到指定文件夹中)。然后其他查找检查外键约束。 此外,所有不匹配的行都被重定向到另一个数据库。 所以我可以检查无效的行,然后一个审计包让我知道我的 NoMatchingRowsCall 表在输入期间是否发生了变化。

现在,我想在没有匹配的行中添加“错误消息”以检查“该行有什么问题?”。我想在每次查找后添加一个“派生列(没有匹配的输出)以添加错误消息。那怎么样?如何在“派生列”中添加文本内容?我应该使用包变量吗?

这是我想要的:

ID | C1 | C2 | C3 | ERROR_MESSAGE
1  | .. | .. | .. | Row already exists
2  | .. | .. | .. | FK error for column C1
3  | .. | .. | .. | FK error for column C2
...

我想要一个“软”解决方案来跟踪失败的行而不停止包执行,并且能够在需要时通过更改失败的键来手动插入失败的行。

【问题讨论】:

    标签: sql-server ssis sql-server-2012 sql-server-2012-datatools


    【解决方案1】:

    为每个 No Match 输出添加派生的 Error_Message 列将为您提供所需的内容。在您当前的设计中,您只需针对每个派生列输入错误消息,因为每个流将有一个派生列组件。除非您想在其他地方重用值或将所有消息集中在一个地方,否则无需添加变量

    虽然有几个警告...

    1. 查找本质上是昂贵的,因为它们执行逐行查询。如果您只处理少量行/小表,这可能没问题,但如果您正在查看数百万行,您很快就会遇到瓶颈。解决此问题的一种方法是将您的数据临时放入数据库并执行整个集合检查(例如,使用左连接选择所有没有相关 y 行的 x)。这样,您就可以让 sql 批量执行腿部工作,这样会更快
    2. 您当前的设计只会突出第一个问题。解决“无员工问题”后,同一行可能会出现日期不匹配。理想情况下,您希望验证所有问题的所有行(重复行除外),以便您有一套完整的问题需要解决。如果您决定切换到使用 SQL 进行验证,也许您可​​以为每个问题类型添加一个位标志列,或者在单个列中添加一个涵盖所有问题的位标志

    【讨论】:

    • 每月少于 1000 行(自 2004 年起),每晚都会启动 ETL 流程。所以我认为查找不会是一个大问题!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-04
    • 2010-12-02
    • 1970-01-01
    • 2019-02-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多