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
我创建了一个 运行 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