如何检查ssis中条件拆分组件中的列是否为整数?

时间:2016-07-19 05:44:21

标签: ssis ssis-2012

我有以下SSIS包:

enter image description here

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

如果AccountNo是整数,我想检查Constraint Check组件。例如,平面文件源中的列可能是:

12355ss2rt3

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

enter image description here

此表达式使用Type Cast Group和(DT_I8)条件,但是我收到此错误:

enter image description here

我该如何解决?

2 个答案:

答案 0 :(得分:2)

您可以使用派生列来执行此操作。

在我的示例中,输入为:

AccountNo
123
1234
123f
1e23

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

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

(DT_I8)AccountNo

第2步:配置错误输出,以捕获错误行<​​/ strong>

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

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

现在红色流包含无法转换为整数的值 蓝色流动是值成功铸造的。

查看以下截图以获取详细信息:

Screenshot - Step 2 Config error output

第3步:按照您希望的方式处理uncast值

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

  • [ErrorCode]
  • [ErrorColumn]

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

您可以参考msdn文档查找ErrorCode

基于ErrorColumn,您可以确保错误来自AccountNo列。

答案 1 :(得分:0)

直接使用条件拆分,您将无法执行此操作。

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

创建派生列isNumeric

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

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