SQL Server无法从Excel工作簿导入全部数据的问题咨询
解决Excel导入SQL Server的255行/Null列问题
问题根源
你选的Microsoft Excel 5.0版本是适配旧xls格式的驱动,自带256列、65536行的限制,而且默认只扫描前8行判断数据类型——要是那两列的前8行没有效值,驱动就会把它们识别为Null类型,同时把所有文本列的长度默认设为255,直接导致后续数据导入截断或丢失。
具体修复步骤
- 换对Excel版本选项:回到导入向导的数据源设置,把版本改成Microsoft Excel 2007及更高版本(*.xlsx),对应你的xlsx文件格式,彻底避开旧驱动的限制。
- 手动修正列映射:
- 在「选择源表和源视图」步骤,点编辑映射按钮。
- 针对那两列Null的字段,手动指定正确的数据类型(比如
nvarchar(MAX)、int等),把列长度从255改成实际需要的大小(嫌麻烦就直接设为MAX)。 - 检查所有列的类型是否和Excel里的内容匹配,确认后保存映射继续导入。
- 让驱动扫描全表判断类型:
如果还是出现列识别错误,在Excel文件所在文件夹新建excel.ini文件,写入以下内容:
这会强制驱动扫描整个工作表来判断数据类型,而不是只看前8行。改完重启SSMS再重新导入。[Excel 12.0 Xml] TypeGuessRows=0 - 备选:用T-SQL直接导入
要是向导还是搞不定,试试用T-SQL语句导入,可控性更强:
注意把路径、表名、工作表名改成你自己的。-- 先启用必要配置(仅第一次执行) sp_configure 'show advanced options', 1; RECONFIGURE; sp_configure 'Ad Hoc Distributed Queries', 1; RECONFIGURE; -- 导入数据到新表 SELECT * INTO 你的目标表名 FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0', 'Excel 12.0 Xml;HDR=YES;Database=你的Excel文件完整路径', 'SELECT * FROM [Sheet1$]')
内容的提问来源于stack exchange,提问作者Jessica May
相关产品推荐
相关产品推荐

