本地及服务器运行SSIS包时Excel时间列转换失败求助
解决SSIS Excel源到OLE DB目标的Time列转换错误
问题背景
Excel Source的Time列触发转换错误,提示“因可能存在数据丢失,无法转换该值”,关联错误码:0xC0209029、0xC0209072、0xC0047038。核心矛盾是源列数据类型为Date[DT_Date],目标列是UNICODE_String[DT_WSTR],直接转换时出现不兼容问题,本地和SQL Server代理作业执行均失败。
解决步骤
1. 引入显式数据转换组件
在Excel Source与OLE DB Destination之间添加Data Conversion组件:
- 把源
Time列(DT_Date)拖入转换组件,设置转换后的数据类型为DT_WSTR,指定长度(建议20,足够覆盖常规日期字符串) - 用转换生成的新列连接到目标OLE DB的
Time列,替代原直接映射
2. 清理Excel源数据格式
- 打开源.xlsx文件,检查
Time列的实际内容:是否存在混合格式(比如部分是日期、部分是文本,或包含时间戳的完整日期值) - 统一设置列格式为日期,对无效值(空值、特殊字符)提前清理;若需保留字符串格式,先用Excel的
TEXT函数将日期转为固定格式(如TEXT(A1,"yyyy-MM-dd"))后再保存
3. 临时重定向错误行排查
若不清楚具体错误数据,可调整错误处置策略定位问题:
- 双击Excel Source,切换到错误输出选项卡
- 将
Time列的错误和截断处置改为重定向行 - 添加Flat File Destination接收错误行,查看具体触发错误的数值,针对性修复
4. 对齐源目标数据类型(推荐长期方案)
如果业务逻辑允许,修改目标OLE DB的Time列数据类型为DATE或DATETIME,直接匹配源类型,彻底消除转换风险;若必须存储为字符串,改用Derived Column组件自定义转换格式(如(DT_WSTR,20)[Time]),确保格式一致性。
5. 匹配Excel驱动执行环境
- 确认本地和SQL Server代理使用的Excel驱动位数(32/64位)一致:若代理是64位,需安装64位Excel驱动,或在作业配置中勾选使用32位运行时(适配32位驱动的包)
内容的提问来源于stack exchange,提问作者Kiki Upgrade
相关产品推荐
相关产品推荐

