无法在SSIS中将String转换为Numeric / Decimal

时间:2014-06-30 13:26:28

标签: sql sql-server ssis

我有五个或六个OLE DB源,其字符串[DT_STR],长度为500和1252(拉丁语)作为代码页。 列的格式类似于 0,08 0,10 等等。正如您所看到的,它用逗号分隔。 除了其中一个,所有这些都是平等的。在这一个来源中,我有一个POINT作为分离。在此,当我在OLE DB Source的高级编辑器中设置数据类型时,它正在进行。如果我在OLE DB Source的高级编辑器中设置数据类型,则另一个(使用逗号分隔)它也可以工作。但奇怪的是,它不与其他来源合作,尽管它们是相同的(用逗号分配)。

我测试了数字(18,2)和十进制(2)。

另一个尝试解决转换任务和/或派生列任务的问题,失败了。

我正在使用SQL Sevrer 2008 R2

慢慢地,我认为SSIS愚弄我:)

有人有想法吗?

///编辑 这里有两个屏幕:

正在工作: click

不工作: click

3 个答案:

答案 0 :(得分:0)

我不会在OLE DB Source的高级编辑器中设置数据类型。我将转换OLE DB源的SQL代码中的数据,或转换为脚本转换,例如使用Decimal.TryParse,它将更新一个新列。

SSIS对于数据类型是不可思议的挑剔,并试图弄乱它的内部结构是没有效率的。

答案 1 :(得分:0)

检查逗号之间是否有空格,以便SSIS在尝试将空格转换为数字时抛出错误。空格在空格之间不相等。

重定向错误行并将数据输出到文件。然后,您可以检查SSIS拒绝的数据,并确定导致错误的原因。

错误原因

1)无法在目标数据库中或在创建SSIS包期间正确处理Null。源很可能包含一个空数据库,但目标不接受导致构建生成错误的NULL数据。

2)源和目标之间的数据类型不匹配。例如,source列具有varchar数据,而destination列具有int数据类型。这很容易产生上述错误。某些类型的数据类型会自动转换为另一种数据类型,并且不会生成错误,但会出现不兼容的数据类型,这会导致The value could not be converted because of a potential loss of data.错误。

答案 2 :(得分:0)

当未处理的空格时,就会出现此问题。我一直在使用条件(三元)运算符来检查长度:

LEN(TRIM([Column Name])) >= 1 ? (DT_NUMERIC,38,8)[Column Name] : 0