我有一个CSV文件,其中包含以下数据:
EmployeeCode,EmployeeName,EmployeeSalary,Date
101,raju,1000,2/2/2003
102,krish,100,3/4/2005
103,rishbh,320,12/9/2007
104,rani,4690,12/8/2008
105,olesia,2000,17/4/2009
106,olga,2000,12/6/2010
107,mellisa,3330,12/4/2011
我有一张名为员工的表:
EmployeeCode nvarchar(50)
EmployeeName nvarchar(50)
EmployeeSalary money
Date datetime
当我尝试使用SSIS包将此CSV文件加载到我的表中时,它会给我一个错误
1)[ADO NET Destination [2]]错误:期间发生了异常 数据插入,从提供者返回的消息是:给定的 数据源中String类型的值无法转换为类型 指定目标列的日期。
2)[SSIS.Pipeline]错误:SSIS错误代码DTS_E_PROCESSINPUTFAILED。 组件" ADO NET Destination"上的ProcessInput方法(2)失败了 处理输入" ADO NET目标时出错,代码为0xC020844B 输入" (9)。标识的组件从中返回错误 ProcessInput方法。该错误特定于组件,但是 错误是致命的,将导致数据流任务停止运行。 在此之前可能会发布错误消息以获取更多信息 关于失败。
但是,如果我从CSV中删除日期列并尝试插入一切正常。日期列有什么问题,为什么不采用这些值?
答案 0 :(得分:0)
使用 OLE DB Destinatio n而不是 ADO NET目的地
此问题是由于平面文件的默认数据类型被选中“string [DT_STR]”,它等于数据库中的varchar,但是您已使目标表数据类型 nvarchar 等于< strong> Unicode字符串[DT_WSTR] 。
使用派生列将数据类型字符串[DT_STR]更改为Unicode字符串[DT_WSTR]
或
转到显示高级编辑器(来源)&gt;&gt;输入和输出属性输出列&gt;&gt; DAta type Property&gt;&gt;对于EmployeeCode和EmployeeName,将数据类型更改为 Unicode字符串[DT_WSTR] 。
答案 1 :(得分:0)
首先,如果表很大并且现在开始发布,则应使用OLE DB destination
而不是ADO.Net Destination
,因为表数据类型的日期为'datetime
',因此您必须使用右键单击组件并转到高级编辑器,以将输入数据更改为日期时间。
否则,您可以在源和目标之间进行数据转换,并将日期转换为"DB_Datetime"
。希望您这样做时不会遇到任何问题。
答案 2 :(得分:0)
我遇到了同样的问题,我的回答听起来很愚蠢。我为此苦苦挣扎了 2 天,最终意识到我的 CSV 文件中的日期格式有误。
例如:
105,olesia,2000,17/4/2009 -- 这是无效的,因为它最终以 17 作为一个月并且 无效
当我意识到这一点时,我大吃一惊!希望这对其他人有所帮助!