从 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 数据类型导致值超出范围