Sql server SSIS派生列-数字字段中的文本未转换
我正在将数千个csv文件导入SQL数据库。它们都有两列:日期和值。在某些文件中,值列仅包含句点(例如:“.”)。我尝试创建一个派生列,该列将处理包含句点的任何单元格,代码如下:Sql server SSIS派生列-数字字段中的文本未转换,sql-server,ssis,derived-column,Sql Server,Ssis,Derived Column,我正在将数千个csv文件导入SQL数据库。它们都有两列:日期和值。在某些文件中,值列仅包含句点(例如:“.”)。我尝试创建一个派生列,该列将处理包含句点的任何单元格,代码如下: FINDSTRING((DT_WSTR,1)[VALUE],".",1) != 0 ? NULL(DT_R8) : [VALUE] 但是,当包运行时,当它到达包含句点的单元格时,会出现以下错误: The data conversion for column "VALUE" returned status value 2
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函数中可能缺少一个转义字符,但我似乎找不到它可能是什么。有人对我如何解决这个问题有什么想法吗?尝试调试类似的东西是我一直主张向数据流添加许多派生列的原因。不可能调试整个表达式。相反,首先找到句点的位置并将其添加为新列。然后,您可以将其输入到三元操作中,然后一点一点地添加数据查看器,以确保看到预期看到的内容 就我个人而言,我会采取不同的方法。似乎您希望将
中的任何列设置为DT_R8类型的null
添加派生列,TrimmedValue
,并使用此表达式删除任何前导/尾随空格,然后
RTRIM(LTRIM(Value))
添加第二个派生列组件,这次我们将添加列更年期值
,因为它将删除句点。使用这个表达式
(TrimmmedValue == ".") ? Trimmedvalue : NULL(DT_WSTR, 50)
现在,您可以添加最终的派生列,其中我们将值的字符串表示形式转换为浮点表示形式
IsNull(MenopausalValue) ? NULL(DT_R8) : (DT_R8) MenopausalValue
如果上面显示了错误,那么您需要应用以下版本,因为我永远记不起更改类型的三元操作的求值顺序
(DT_R8) (IsNull(MenopausalValue) ? NULL(DT_R8) : (DT_R8) MenopausalValue)
将这些操作分解为多个步骤以进行调试的示例
TRIM(Value) == "." ? NULL(DT_R8) : (DT_R8)Value
我认为需要在表达式之间切换位置,比如FINDSTRING((DT_WSTR,1)[VALUE],“,”,1)!=0 ? [值]:空(DT_R8)