【发布时间】:2013-03-25 19:44:45
【问题描述】:
如果我再用头撞桌子 1 次,我可能会永远消失。
来源:Excel
数据:2012-10-05T11:14:00
转化率:
Excel 中的 2012-10-05T11:14:00 到字符串 [DT_STR]
目标:SQL
列数据类型:日期时间
我不断收到以下错误:
[PostBindInspectionsBucket [20]] 错误:SSIS 错误代码 DTS_E_OLEDBERROR。发生 OLE DB 错误。错误代码:0x80004005。 OLE DB 记录可用。来源:“Microsoft SQL Server Native Client 10.0”Hresult:0x80004005 描述:“转换规范的字符值无效”。
[PostBindInspectionsBucket [20]] 错误:输入“OLE DB 目标输入”(33) 上的输入列“RequestTimestamp 的副本”(112) 存在错误。返回的列状态为:“由于可能丢失数据,无法转换该值。”。
[PostBindInspectionsBucket [20]] 错误:SSIS 错误代码 DTS_E_INDUCEDTRANSFORMFAILUREONERROR。 “输入“OLE DB 目标输入”(33)”失败,因为发生错误代码 0xC0209077,并且“输入“OLE DB 目标输入”(33)”上的错误行处置指定错误失败。指定组件的指定对象发生错误。在此之前可能会发布错误消息,其中包含有关失败的更多信息。
[SSIS.Pipeline] 错误:SSIS 错误代码 DTS_E_PROCESSINPUTFAILED。处理输入“OLE DB 目标输入”(33) 时,组件“PostBindInspectionsBucket”(20) 上的 ProcessInput 方法失败,错误代码为 0xC0209029。已识别的组件从 ProcessInput 方法返回错误。该错误是特定于组件的,但该错误是致命的,将导致数据流任务停止运行。在此之前可能会发布错误消息,其中包含有关失败的更多信息。
我做错了什么?来自 Excel 的格式是有效的日期时间格式。
我创建了一个包含“日期时间”类型列的表,然后我将“2012-10-05T11:14:00”粘贴到其中,效果很好。
我也跑了一个
SELECT ISDATE('2012-10-05T11:14:00')
它返回 1,这意味着它是 SQL 中的有效日期时间。
有人知道可能是什么问题吗?
【问题讨论】:
-
它认为 Excel 中的列是什么数据类型?如果您在 Excel 中专门将其格式化为 GENERAL 或 TEXT 会怎样?我怀疑 Excel 格式隐藏了 Excel 中真正的潜在价值。你在哪里看到这个来源日期?在 Excel 中还是在 SSIS 中的数据浏览器中?如果您将 Excel 保存为 CSV,检查它以验证这确实是数据的格式,然后导入它会发生什么?您可能会说我不信任 Excel。
-
还将其导入 VARCHAR 而不是 DATETIME 字段,以再次检查数据的真实性质。此外,在插入表格时,我只使用过 没有 T 指示符(而不是空格)的日期格式。
-
@ElectricLlama Excel 格式几乎总是隐藏/掩盖真正的基础值,尤其是日期或 Excel 可以解释为日期的值。
-
您来自 Excel 的数据以 DT_WSTR 形式输入(右键单击从源到下一个组件的行并检查属性)。您有从 DT_WSTR 到 DT_STR 到日期时间的转换吗?您尝试将什么数据类型转换为(DT_?)?这是来自数据转换的错误还是来自目标?
-
@billinkc 很好发现 - 没想到。
标签: sql-server excel tsql datetime ssis