Sql Can';在SSIS中将字符串转换为数字/十进制

Sql Can';在SSIS中将字符串转换为数字/十进制,sql,sql-server,ssis,Sql,Sql Server,Ssis,我有五到六个OLE DB源代码,带有字符串[DT_STR],长度为500,代码页为1252(拉丁文)。 列的格式类似于0,08或0,10等。如您所见,它用逗号分隔。 除了其中一个,他们都是平等的。在这一个来源中,我有一个分离点。当我在OLEDB源的高级编辑器中设置数据类型时,它就开始工作了。在另一种情况下(逗号分隔),如果我在OLE DB源的高级编辑器中设置数据类型,它也可以工作。但奇怪的是,它不适用于其他来源,尽管它们是相同的(用逗号表示) 我测试了数字(18,2)和十进制(2) 另一次尝试解

我有五到六个OLE DB源代码,带有字符串[DT_STR],长度为500,代码页为1252(拉丁文)。 列的格式类似于0,08或0,10等。如您所见,它用逗号分隔。 除了其中一个,他们都是平等的。在这一个来源中,我有一个分离点。当我在OLEDB源的高级编辑器中设置数据类型时,它就开始工作了。在另一种情况下(逗号分隔),如果我在OLE DB源的高级编辑器中设置数据类型,它也可以工作。但奇怪的是,它不适用于其他来源,尽管它们是相同的(用逗号表示)

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

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

我正在使用SQLServer2008R2

慢慢地,我觉得SSIS在愚弄我:)

有人有主意吗

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

正在工作:

不起作用:


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


SSIS对于数据类型是不可忽视的,并且试图弄乱它的内部结构是不起作用的。

< P>检查逗号之间是否有空格,以便SSIS抛出一个错误,试图将空白空间转换成数字。空格之间不等于零

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

错误原因

1) 在目标数据库中或SSIS包创建期间,未正确处理Null。很可能源包含空数据库,但目标不接受空数据,从而导致生成上述错误


2) 源和目标之间的数据类型不匹配。例如,源列具有varchar数据,目标列具有int数据类型。这很容易产生上述错误。某些类型的数据类型将自动转换为另一种数据类型,并且不会生成错误,但对于将生成
的不兼容数据类型,由于潜在的数据丢失,无法转换值。
错误。

当存在未处理的空间时,会出现问题null。我曾使用条件(三元)运算符检查长度:

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

当你说“不工作”意味着你收到了任何错误信息,如果有,请提供它。是的,你是对的。我收到一条错误消息。错误消息:“[OLE DB Source[4990]]错误:输出“OLE DB Source output”(5000)上的输出列“offer vatFactor”(5061)出错。返回的列状态为:“由于可能丢失数据,无法转换该值。”。我还获得了“转换规范的无效字符值”当我使用数据转换或派生列任务时。但是我用…测试了这些行。。。其中[offer vatfactor]与“[0-9][,][0-9][0-9]”不同,并且没有无效字符。现在,我已将错误行重定向到两个不同的表中。一个用于转换任务,另一个用于派生列任务。在这两个任务中,我有几个专栏。因此,实际上有必要找出是哪列造成了错误。对于这个问题,我找到了这个小教程:但我不知道表达式应该是什么样子的q STEP 4->DER_DFT_Name。谢谢你的评论,这对我帮助很大:)