如果我把我的头撞到桌子上,我还有一次可能会永远消失。excel和sql之间的SSIS日期时间转换问题
来源:Excel中
数据:2012-10-05T11:14:00
转换:
2012-10-05T11:14:00在Excel中字符串[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 Copy”(112)时发生错误。返回的列状态是:“由于潜在的数据丢失,无法转换该值。”
[PostBindInspectionsBucket [20]]错误:SSIS错误代码DTS_E_INDUCEDTRANSFORMFAILUREONERROR。由于错误代码0xC0209077发生,“输入”OLE DB目标输入“(33)”失败,并且“输入”OLE DB目标输入“(33)”上的错误行配置指定错误失败。指定组件的指定对象发生错误。在此之前可能会发布错误消息,提供有关失败的更多信息。
[SSIS.Pipeline]错误:SSIS错误代码DTS_E_PROCESSINPUTFAILED。处理输入“OLE DB目标输入”(33)时,组件“PostBindInspectionsBucket”(20)上的ProcessInput方法失败,错误代码为0xC0209029。标识的组件从ProcessInput方法返回错误。该错误是特定于组件的,但错误是致命的,并且会导致数据流任务停止运行。在此之前可能会发布错误消息,提供有关失败的更多信息。
我在做什么错?来自Excel的格式是有效的日期时间格式。
我创建了一个类型为“datetime”的列表,然后粘贴了它“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。 – 2013-04-03 23:54:06
还将其导入到VARCHAR而不是DATETIME字段中,以再次检查数据的真实性质。当我插入表格时,我也只使用了一个日期格式_而不是T标志符(一个空格)。 – 2013-04-03 23:56:08
@ElectricLlama Excel格式化几乎总是隐藏/掩盖真实的基础值,特别是Excel可以解释为日期的日期或值。 – 2013-04-04 00:35:58