首先,当列不是 NULL时,它可以成功进行转换。目标DB字段接受空值。
在我的数据转换步骤中,我将输入列的数据类型设置为numeric[DT_Numeric]
,精度18和比例2.
我的CSV中有两行,第一行不包含任何NULLS ..如果我执行它就会成功。但是,当我在该列中添加一个NULL值的第二行时,它会失败并且我收到这些错误:
[数据转换[2]]错误:将列“列24”(138)转换为列“DbColumn24”(22)时数据转换失败。转换返回状态值2和状态文本“由于可能丢失数据,无法转换该值。”。
[数据转换[2]]错误:SSIS错误代码DTS_E_INDUCEDTRANSFORMFAILUREONERROR。 “Data Conversion.Outputs [Data Conversion Output] .Columns [DbColumn24]”失败,因为出现错误代码0xC020907F,错误行处理“Data Conversion.Outputs [Data Conversion Output] .Columns [DbColumn24]”指定错误失败。指定组件的指定对象发生错误。在此之前可能会发布错误消息,其中包含有关失败的更多信息。
[SSIS.Pipeline]错误:SSIS错误代码DTS_E_PROCESSINPUTFAILED。组件“数据转换”(2)上的ProcessInput方法在处理输入“数据转换输入”(3)时失败,错误代码为0xC0209029。标识的组件从ProcessInput方法返回错误。该错误特定于组件,但错误是致命的,将导致数据流任务停止运行。在此之前可能会发布错误消息,其中包含有关失败的更多信息。
我认为在数据转换步骤之前我不需要派生列步骤来处理任何空值,因为DB列接受空值。
答案 0 :(得分:0)
由于您的源是CSV,我怀疑您的源中实际上有任何NULL值。您更可能有空字符串值,这些值与NULL不同,并且空字符串不能隐式转换为Decimal。您可能必须在表达式中将空字符串显式转换为NULL。
答案 1 :(得分:0)
工作将是
1)首先将列转换为varchar/nvarchar
2)使用派生列转换为Decimal
3)将转换后的列映射到目标