SSIS 条件拆分拒绝文件

SSIS Conditional Split Reject files

我想将数据迁移到目标 table。 但是,我想为空值和大小超过20个字符的值制作一个拒绝文件。就像我对条件拆分所做的那样? 我这样做了,但它不起作用:

"if len(mail)>10 caractère"

我会将此值导出到拒绝文件

请问我该怎么做?

设计

您可以直接在有条件的拆分中执行此操作,但我建议不要这样做。相反,计算派生列中的布尔值 (true/false) 条件并将其添加到您的数据流中。然后,如果你得到意想不到的结果,你可以在 Derived Column 步骤和 Conditional Split

之间添加一个数据查看器

实施

将派生列添加到数据流中。添加一个名为 BadMail 的新列。如果它是真的,那么我们将路由到坏文件。如果为真,它将继续前往目的地。

SSIS 的表达式语言将使用三元运算符(test) ? true_condition : false_condition

我要测试 null 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 或您命名的任何内容。好的邮件会通过默认的输出路径。