【问题标题】:SSIS data conversion from CSV source column NULL to DB destination Decimal(18,2)从 CSV 源列 NULL 到 DB 目标 Decimal(18,2) 的 SSIS 数据转换
【发布时间】:2016-07-14 16:56:55
【问题描述】:

首先,当列不是 NULL 时,它能够成功地进行转换。目标数据库字段接受空值。

在我的 数据转换 步骤中,我已将输入列的 DataType 设置为 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。处理输入“数据转换输入”(3) 时,组件“数据转换”(2) 上的 ProcessInput 方法失败,错误代码为 0xC0209029。已识别的组件从 ProcessInput 方法返回错误。该错误是特定于组件的,但该错误是致命的,将导致数据流任务停止运行。在此之前可能会发布错误消息,其中包含有关失败的更多信息。

我认为在数据转换步骤之前我不需要 Derived Column 步骤来处理任何空值,因为 DB 列接受空值。

【问题讨论】:

    标签: sql-server ssis


    【解决方案1】:

    解决方法是 1)首先将列转换为varchar/nvarchar 2)使用派生列转换为Decimal 3) 将转​​换后的列映射到目标

    【讨论】:

      【解决方案2】:

      由于您的源是 CSV,我怀疑您的源中实际上是否有任何 NULL 值。更有可能您有空字符串值,它们与 NULL 不同,并且空字符串不能隐式转换为 Decimal。您可能必须在表达式中将空字符串显式转换为 NULL。

      【讨论】:

      • 哦,是的,你是对的。所以它实际上是字符串“NULL”。
      • 所以当生成 CSV 时,NULL 实际上会转换为空字符串,而不是实际的单词“NULL”,对吗?然后我可能需要将我的虚拟 csv“NULL”修改为空字符串。
      • 不,您可以跳过空字符串步骤。如果您的 CSV 包含字符串“NULL”,那么您只需将“NULL”(字符串)显式转换为 NULL(DBNull 值)。
      • 好吧,这就是它 [Column 24] == "NULL" 吗? NULL(DT_WSTR,50):[第 24 列]。然后我在数据转换步骤中将其转换为十进制。非常感谢 Tab Alleman!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-11-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-25
      • 1970-01-01
      相关资源
      最近更新 更多