从 Excel 导入 SQL Server:将 varchar 数据类型转换为 datetime 数据类型导致值超出范围

Posted

技术标签:

【中文标题】从 Excel 导入 SQL Server:将 varchar 数据类型转换为 datetime 数据类型导致值超出范围【英文标题】:Importing from Excel to SQL Server: The conversion of a varchar data type to a datetime data type resulted in an out-of-range value 【发布时间】:2014-10-08 19:45:03 【问题描述】:

我有以下 Excel 工作簿:

https://meocloud.pt/link/7cb3ef48-7556-4d36-ab9a-c247d3f7b29d/FichasTeste.xls/

已格式化为导入 SQL 数据库。服务器有以下详细信息:

如您所见,导入器中的映射是正确的

当我尝试导入 excel 文件时,无论我对带有日期的列进行什么修改,状态始终相同。

242:将 varchar 数据类型转换为 datetime 数据类型导致值超出范围。

3621: 语句已终止。

我应该修改什么以便可以导入这些行而不会出现该错误?

【问题讨论】:

【参考方案1】:

Excel 将日期存储为整数,如果您将 excel 字段更改为 TEXT 您会看到,但我不确定您为什么会遇到这个问题,您应该能够直接从 Excel 导入并拥有保留日期,至少您可以使用 SQL 的导入向导以及 SSIS。

一种解决方法是使用 Excel 中的 TEXT() 函数将您的日期转换为可接受的格式:

=TEXT(F2,"yyyy-mm-dd")

我喜欢使用 OPENROWSET() 从 Excel 导入,但这需要一些额外的设置并且有它自己的缺点:

SELECT * 
FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0', 'Excel 12.0;Database=C:\YourExcelFile.xls', [Sheet1$])

【讨论】:

不幸的是,使用 TEXT() 没有帮助。使用分析器,我看到日期总是像 '1/1/2013' 而不是那种格式。

以上是关于从 Excel 导入 SQL Server:将 varchar 数据类型转换为 datetime 数据类型导致值超出范围的主要内容,如果未能解决你的问题,请参考以下文章

将超过 255 个字符从 excel 导入到 sql server(上一个问题 - 如何使用 ssis 将文本限定 CSV 动态加载到 sql server)

从 Excel 到 SQL Server 的数据导入无法导入所有数据

在 SQL Server 2008 中将数据从浮点类型的 Excel 导入 varchar

从 Excel 导入 SQL Server:将 varchar 数据类型转换为 datetime 数据类型导致值超出范围

从 excel 导入数据时防止 SQL Server 2008 中的行重复

从 Excel 导入 SQL Server 2005 时出现截断错误