SSIS加载Excel数据到表时如何按列长度排序避免截断报错
解决方法
该截断问题根源是SSIS所用的Excel ACE/Jet驱动默认仅扫描前8行内容推断列数据类型与长度,可通过以下两种方案在SSIS包内直接调整,无需修改Excel源文件:
方案1:调整驱动扫描规则(推荐,自动适配列长度)
- 打开SSIS项目的「连接管理器」面板,右键选中对应的Excel连接管理器,选择「属性」
- 在属性列表中找到
ConnectionString参数,点击右侧的省略号打开编辑界面 - 在现有连接字符串末尾追加配置:
;TypeGuessRows=0;ImportMixedTypes=Text- TypeGuessRows=0:要求驱动扫描Excel表所有行内容推断列长度,而非仅扫描前8行
- ImportMixedTypes=Text:避免列中存在混合类型数据时,驱动自动转换类型导致内容丢失
- 保存连接配置后,右键点击Excel源组件选择「刷新元数据」,验证Query列的输出长度已适配最长内容后重新执行包即可
方案2:手动强制指定列输出类型
如果第一种方案受服务器驱动权限限制无法生效,可直接硬编码指定列长度:
- 打开数据流任务编辑界面,右键点击Excel源组件,选择「显示高级编辑器」
- 切换到「输入和输出属性」标签页,依次展开「Excel源输出」→「输出列」节点
- 找到
Query列,在右侧属性栏做如下配置:- 若最长内容不超过4000字符:将
DataType设为Unicode字符串 [DT_WSTR],Length设为4000 - 若最长内容超过4000字符:直接将
DataType设为Unicode文本流 [DT_NTEXT],可完美适配目标表的nvarchar(max)类型,无截断风险
- 若最长内容不超过4000字符:将
- 保存配置后刷新OLEDB目标的元数据,确认列映射关系正常即可执行
内容的提问来源于stack exchange,提问作者Sujatha Murugadass
相关产品推荐
相关产品推荐

