gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 18:31:51 25 4
gpt4 key购买 nike

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

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 脚本插入相同的数据并且没有错误消息。

最佳答案

平面文件 不是强制为每一列指定特定数据类型的数据源。因此它可能包含 unicode 字符或空格,以防止将列读取为日期时间。

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

  • 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

关于sql-server - SSIS 平面文件 [DT_DBTIMESTAMP] 无法转换为 SQL datetime2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43467982/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com