SSIS加载数据错误

时间:2016-05-23 03:37:06

标签: sql-server ssis business-intelligence msbi

我有一个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中删除日期列并尝试插入一切正常。日期列有什么问题,为什么不采用这些值?

3 个答案:

答案 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 作为一个月并且 无效

当我意识到这一点时,我大吃一惊!希望这对其他人有所帮助!