我有五个或六个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
答案 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