问题描述
我想将数据迁移到目标表。 但是,我想为空值和大小超过20个字符的值制作一个拒绝文件。正如我对条件拆分所做的那样? 我做到了,但是没用:
"if len(mail)>10 caractère"
我将导出此值以拒绝文件
请问我该怎么做?
解决方法
设计
您可以有条件拆分直接执行此操作,但我建议您不要这样做。相反,请在“派生列”中计算布尔(真/假)条件,并将其添加到数据流中。然后,如果获得意外结果,则可以在“派生列”步骤和“条件拆分”步骤之间添加数据查看器
实施
将派生列添加到数据流。添加一个名为BadMail
的新列。如果是真的,那么我们将路由到错误的文件。如果是真的,它将继续到目的地。
SSIS的表达式语言将使用三元运算符(test) ? true_condition : false_condition
我将测试空ISNULL(mail)
,大于20 len(mail) > 20
和零长度len(mail) == 0
的情况。
||
是符合逻辑的,因此,如果这三个条件中的任何一个为真,那么我们需要将BadMail设置为true
(ISNULL(mail) || len(mail) > 20 || len(mail) == 0) ? true : false
您可以简化为消除三元运算符,但是我发现我的意图是明确的,在这些情况下会有所帮助。附带说明一下,如果仍然有意外结果的问题,请添加前面的“派生列”转换,并为每个条件(空,0或大于20个字符)添加一个列,然后可以单独检查它们。
现在,我们添加条件拆分
此处的表达式只是我们的新列BadMail
,它将路由至输出路径1或您命名的任何名称。好邮件将通过默认输出路径。