SSIS加载数据错误

问题描述 投票:0回答:3

我有一个包含以下数据的 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 目标 [2]] 错误:执行期间发生异常 数据插入时,提供者返回的消息是:给定的 数据源中 String 类型的值无法转换为类型 指定目标列的日期。

2) [SSIS.Pipeline] 错误:SSIS 错误代码 DTS_E_PROCESSINPUTFAILED。 组件“ADO NET Destination”(2) 上的 ProcessInput 方法失败 处理输入“ADO NET Destination”时出现错误代码 0xC020844B 输入”(9)。所识别的组件从 处理输入方法。该错误特定于组件,但 错误是致命的,将导致数据流任务停止运行。 在此之前可能发布了包含更多信息的错误消息 关于失败。

但是,如果我从 CSV 中删除日期列并尝试插入,一切都会正常。日期列有什么问题,为什么不取值?

sql-server ssis business-intelligence msbi
3个回答
0
投票

使用 OLE DB 目标n 而不是 ADO NET 目标

此问题是由于平面文件的默认数据类型选择“string [DT_STR]”,它等于数据库中的 varchar ,但您已将目标表数据类型设置为 nvarchar 等于 Unicode string [DT_WSTR]

使用派生列将数据类型字符串 [DT_STR] 更改为 Unicode 字符串 [DT_WSTR]

转到显示高级编辑器(源代码)>>输入和输出属性输出列>>数据类型属性>>将EmployeeCode和EmployeeName的数据类型更改为Unicode字符串[DT_WSTR]


0
投票

首先,如果您的表很大并且现在要发布,您应该使用

OLE DB destination
而不是
ADO.Net Destination
,在表中日期数据类型为“
datetime
”,因此您必须将输入数据更改为使用右键单击组件并转到高级编辑器来日期时间。 否则,您可以在源和目标之间进行数据转换,并将日期转换为
"DB_Datetime"
。我希望您在执行相应操作时不会遇到任何问题。


0
投票

我也遇到了同样的问题,我的答案听起来很愚蠢。我纠结了 2 天,最后发现我的 CSV 文件中的日期格式是错误的。

例如:

105,olesia,2000,17/4/2009 -- 这是无效的,因为它最终以 17 作为一个月,并且 无效

当我意识到这一点时,我大吃一惊!希望这可以帮助其他人前进!

© www.soinside.com 2019 - 2024. All rights reserved.