SSIS派生列 - 数字字段中的文本未进行转换

时间:2016-05-10 18:01:12

标签: sql-server ssis derived-column

我将数千个csv文件导入SQL DB。它们每个都有两列:日期和价值。在某些文件中,value列只包含一个句点(例如:“。”)。我试图创建一个派生列,它将处理包含具有以下代码的句点的任何单元格:

FINDSTRING((DT_WSTR,1)[VALUE],".",1) != 0 ? NULL(DT_R8) : [VALUE]

但是,当程序包运行时,当它到达包含句点的单元格时会收到以下错误:

The data conversion for column "VALUE" returned status value 2 and status text 
"The value could not be converted because of a potential loss of data".

我猜测我的FINDSTRING函数中可能存在一个逃避字符,但我似乎无法找到它可能是什么。有没有人对如何解决这个问题有任何想法?

2 个答案:

答案 0 :(得分:0)

尝试调试这样的事情就是为什么我总是提倡在数据流中添加许多派生列。调试整个表达式是不可能的。相反,首先找到句点的位置并将其添加为新列。然后,您可以将其输入到三元操作中,一点一点地添加数据查看器,以确保您看到期望看到的内容。

就个人而言,我采取了不同的方法。您似乎希望将.的任何列创建为DT_R8类型的null。

添加派生列TrimmedValue并使用此表达式删除任何前导/尾随空格,然后

RTRIM(LTRIM(Value))

添加第二个派生列组件,这次我们将添加列MenopausalValue,因为它将删除句点。使用此表达式

(TrimmmedValue == ".") ? Trimmedvalue : NULL(DT_WSTR, 50)

现在,您可以添加最终的派生列,其中我们将Value的字符串表示形式转换为浮点表示。

IsNull(MenopausalValue) ? NULL(DT_R8) : (DT_R8) MenopausalValue

如果上面显示错误,那么您需要应用以下版本,因为我永远不会记住更改类型的三元操作的评估序列。

(DT_R8) (IsNull(MenopausalValue) ? NULL(DT_R8) : (DT_R8) MenopausalValue)

将这些操作分解为多个步骤以进行调试的示例

答案 1 :(得分:0)

你可以这样做:

TRIM(Value) == "." ? NULL(DT_R8) : (DT_R8)Value

enter image description here

enter image description here