SSIS平面文件[DT_DBTIMESTAMP]无法转换为SQL datetime2

3
我创建了一个正在运行的SSIS,尝试将数据插入SQL Server并没有出现错误,但突然弹出以下错误信息:

Error: 0xC02020A1 at Data Flow Task, Flat File Source [59]: 数据转换失败。列“SCB_ActualDTime”的数据转换返回状态值2和状态文本“The value could not be converted because of a potential loss of data.”。

它指出错误发生在第8行,包含来自...的这些数据。
SCB_ActualDTime
2017-04-16 15:28:07

很奇怪,因为我尝试通过SQL脚本插入相同的数据,没有出现错误信息。


尝试将该行从您的输入数据中删除,看看是否仍然出现错误。 - Tab Alleman
1个回答

1

Flat File不是一种数据源,它强制每个列都使用特定的数据类型。因此,它可能包含Unicode字符或空格,这会阻止将列读取为Datetime。

在处理了许多案例之后,我决定以这种方式处理平面文件。

  • Flat File Connection Manager中,我将所有列都作为DT_STR列进行读取,而不指定其他数据类型
  • DataFlow Task内部,我将添加一个脚本组件来检查列值是否可以转换为估计的数据类型,然后进行转换

假设日期列名为inColumn

在DataflowTask中,添加一个脚本组件,将inColumn标记为输入列,添加一个新的输出列outColumn,其数据类型为DT_DBTIMESTAMP

将脚本语言更改为vb.net

enter image description here

将您的日期列标记为输入。

enter image description here

为每个日期列创建一个输出列。

enter image description here

在脚本内,在Input0_ProcessInputRow子程序中,使用DateTime.ParseExact函数,如下所示:

在此示例中,日期列为MailReceivingDate

    Public Class ScriptMain
        Inherits UserComponent


        Public Overrides Sub Input0_ProcessInputRow(ByVal Row As Input0Buffer)

            If Not Row.MailReceivingDate_IsNull AndAlso
                  Not String.IsNullOrEmpty(Row.MailReceivingDate.Trim) Then

                Dim dtDate as Date

               If DateTime.TryParseExact(Row.MailReceivingDate.Trim, "yyyy-MM-dd HH:mm:ss", New System.Globalization.CultureInfo("en-GB"),System.Globalization.DateTimeStyles.None,dtDate) Then

                    Row.OutColumn = dtDate

               Else

                    'If column cannot be parsed

                    Row.outColumn_IsNull = True

               End If

            Else

                    Row.outColumn_IsNull = True

            End If

        End Sub

    End Class

在我接受你的答案之前,还有一件事。如果我有另一列需要处理,会创建另一个子程序来处理我的column2吗? - Vian Ojeda Garcia
@VianOjedaGarcia 但你需要将另一列标记为输入,并创建一个新的输出列。 - Hadi
@VianOjedaGarcia 请注意,此代码将设置为 Null 每个无法解析为日期的列。祝你好运,我会离线一段时间。 - Hadi
你必须在这里添加自己的代码。你必须决定是添加一个常量值还是进行一些逻辑处理。 - Hadi
如果所有的日期格式都正确,它将不会转换为null。 - Hadi
显示剩余7条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接