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

SSIS Flat File [DT_DBTIMESTAMP] cant convert to SQL datetime2

我创建了一个 运行 SSIS,我尝试将数据无误地插入到 SQL 服务器 但是突然弹出这个错误信息

Error: 0xC02020A1 at Data Flow Task, Flat File Source [59]: Data conversion failed. The data conversion for column "SCB_ActualDTime" returned status value 2 and status text "The value could not be converted because of a potential loss of data.".

它说错误发生在第 8 行,其中包含来自

的这些数据
SCB_ActualDTime
2017-04-16 15:28:07

这真的很奇怪,因为我尝试通过 SQL 脚本插入相同的数据并且没有错误消息。

Flat File 不是强制为每一列指定特定数据类型的数据源。因此它可能包含 unicode 字符或空格,以防止将列读取为 Datetime。

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

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

假设日期列名是inColumn

在 DataflowTask 中,添加脚本组件,将 inColumn 标记为输入列,添加数据类型为 DT_DBTIMESTAMP

的新输出列 outColumn

将脚本语言更改为 vb.net

将您的日期列标记为输入

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

在脚本中,在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