通过SSIS将Excel导入SQL Server:开发正常生产环境异常求助
解决SSIS电子表格导入生产环境失败的问题
这问题我碰到过好多次了,核心就是驱动位数和SSIS运行时位数不匹配,结合你的环境配置,给你拆解具体的排查和解决步骤:
1. 先搞懂核心匹配规则
SSIS处理Excel/Access这类桌面数据源时,驱动和运行时的位数必须严格对应:
- 如果你的SSIS包设置了
64位运行时=true,必须搭配64位版本的Access Database Engine; - 要是生产环境装的是32位Access Database Engine,那只能把项目的
64位运行时设为false,二者不能混搭。
你现在的生产环境刚好踩了这个坑:装了32位驱动却开了64位运行时,64位的SSIS进程根本调用不了32位的驱动,自然跑不起来。
2. 针对你的环境的两种调整方案
方案A:保留32位Access Database Engine(适合有其他32位依赖的场景)
- 把SSIS项目的
64位运行时改回false; - 重点注意执行方式:如果是用SQL Agent作业跑包,一定要在作业步骤的「配置」里勾选使用32位运行时;如果是手动执行,别用默认的64位
DTExec.exe,要找32位版本的路径:C:\Program Files (x86)\Microsoft SQL Server\[你的版本号]\DTS\Binn\DTExec.exe(比如SQL Server 2019对应的版本号是15)。
方案B:换成64位Access Database Engine(更推荐纯64位环境)
- 先卸载生产环境的32位Access Database Engine(注意:32位和64位版本不能共存,强行装会出问题);
- 安装64位版本的Access Database Engine;
- 保持SSIS项目的
64位运行时=true,这样驱动和运行时位数完全匹配,就能正常执行了。
3. 顺带排查几个容易忽略的小问题
- 文件路径与权限:确认生产环境的Excel文件路径是对的,而且SSIS的执行账户(不管是SQL Agent账户还是手动执行的账户)有读取该文件的权限;
- 延迟验证设置:这个选项主要是开发时用来跳过提前校验连接的,生产环境建议设为
false,确保连接能正常建立; - 开发环境的特殊性:你开发环境没装Access驱动却能跑,其实是因为Visual Studio/SSDT自带了32位的Excel驱动,而且调试时可能默认用了32位模式(哪怕项目设了64位运行时,VS调试有时候会优先走32位),所以别拿开发环境的情况对标生产。
内容的提问来源于stack exchange,提问作者J.D. Walker
相关产品推荐
相关产品推荐

