【问题标题】:How to check if column is integer in conditional split component in ssis?如何检查ssis的条件拆分组件中的列是否为整数?
【发布时间】:2016-07-20 12:12:28
【问题描述】:

我有以下 SSIS 包:

在我的包中,平面文件源数据馈送到条件拆分组件中。其中一列是AccountNo。 平面文件源输出数据类型中的该列是:string [DT_STR]

如果AccountNo 是整数,我想检查约束检查组件。例如,平面文件源中的那一列可能是这样的:

12355ss2rt3

并且该输入不是整数。我想将一个有效的整数传递给约束检查输出。在约束检查组件中,我有这个:

此表达式使用类型转换组和(DT_I8) 条件,但我收到此错误:

我该如何解决?

【问题讨论】:

    标签: ssis ssis-2012


    【解决方案1】:

    您可以使用派生列来做到这一点。

    在我的例子中,输入是:

    AccountNo
    123
    1234
    123f
    1e23
    

    第 1 步:尝试将字符串转换为整数

    只需使用派生列,尝试转换为 I8

    (DT_I8)AccountNo

    第 2 步:配置错误输出,捕获错误行

    成功转换的行将进入正常流,无法转换为 I8 的值将重定向到错误流。 一般的数据流是这样的(查看截图): Data flow

    要获取错误值,您只需从驱动程序列中拖放红色箭头即可。

    现在红色流包含不能转换为整数的值 蓝色流是价值成功施放的流。

    查看以下截图了解详情:

    Screenshot - Step 2 Config error output

    第 3 步:以您想要的方式处理未铸造价值

    请注意,错误流的输出将为您提供 2 个有价值的列:

    • [错误代码]
    • [错误列]

    让我们使用这些列来确保“强制转换为整数失败”的错误。

    您可以参考msdn文档查找ErrorCode

    根据ErrorColumn,可以确定错误是否来自AccountNo列。

    【讨论】:

      【解决方案2】:

      直接使用条件拆分你将无法做到这一点。

      使用派生列/脚本组件检查数据是否为数字

      创建派生列 isNumeric

      表达式:(DT_I4)AccountNo == (DT_I4)AccountNo ? 1 : 0

      现在在条件拆分中使用它。

      【讨论】:

        猜你喜欢
        • 2016-01-31
        • 2012-04-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-04-26
        • 2012-01-29
        相关资源
        最近更新 更多