我创建了一个正在运行的SSIS,我尝试将没有错误的数据插入SQL Server 但突然出现此错误消息
错误:数据流任务中的0xC02020A1,平面文件源[59]:数据转换失败。列" SCB_ActualDTime"的数据转换返回状态值2和状态文本"由于可能丢失数据,无法转换该值。"。
它表示错误发生在第8行,其中包含来自
的这些数据SCB_ActualDTime
2017-04-16 15:28:07
这真的很奇怪,因为我尝试通过SQL脚本插入相同的数据,并且没有错误消息。
答案 0 :(得分:1)
Flat File
不是强制每列特定数据类型的数据源。因此它可能包含unicode字符或空格,以防止将列读取为Datetime。
在处理了很多案例后,我决定以这种方式使用平面文件。
Flat File Connection Manager
我会将所有列都读为DT_STR
列,而不指定其他数据类型DataFlow Task
内部我将添加一个脚本组件来检查列值是否可以转换为估计的数据类型然后转换它假设日期列名称为inColumn
在DataflowTask中,添加脚本组件,将inColumn
标记为输入列,使用dataType 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