如何添加额外的列来处理SSIS数据流中的错误消息?

时间:2014-11-27 10:17:08

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

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

这是我的数据流:

enter image description here

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

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

这是我想要的:

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

我想要一个“软”解决方案来跟踪没有停止包执行的失败行,并且如果需要,可以通过更改失败的密钥来手动插入失败的行。

1 个答案:

答案 0 :(得分:1)

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

,否则无需添加变量

虽然有几个警告......

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