SSIS报错DTS_E_PRIMEOUTPUTFAILED:CData源Modulekey列长度不匹配
问题根因
该截断报错触发点在CData SageIntacct源组件内部的元数据校验环节,发生时机早于SSIS管道的下游错误处理、目标表写入流程,因此此前配置列错误重定向、删除目标端问题列、切换32/64位运行模式的操作完全无法生效,组件会直接抛出致命错误终止管道执行。
报错本质是CData驱动默认硬编码的Modulekey字段元数据长度(6位),和SageIntacct接口实际返回的字段值长度(11位)不匹配。
解决方案(按落地优先级排序)
- 直接修改CData连接的元数据映射配置(全量导入场景下最省事)
打开CData SageIntacct连接管理器的自定义属性页,开启Support Enhanced SQL选项,同时将Map String Length参数设置为-1(代表自动将所有字符串字段映射为最大长度,适配所有返回值长度),配置完成后重新刷新源组件元数据、重新映射字段即可。也可以直接编辑连接字符串,追加如下参数:
配置后驱动不会再用默认的固定长度校验字符串字段,从根源上避免这类长度不匹配的截断报错。Support Enhanced SQL=1;Map String Length=-1; - 用自定义SQL查询绕开默认元数据校验
源组件的数据访问模式不要选「表或视图」,切换为「SQL命令」,手写查询语句显式转换Modulekey的字段长度,示例:
这种模式下CData驱动会按照自定义查询的返回结果重新生成元数据,不会再沿用默认的6位长度定义做校验。SELECT CAST(Modulekey AS NVARCHAR(50)) AS Modulekey, -- 其余需要导入的字段按实际业务需求列出 FROM 你要抽取的SageIntacct业务对象 - 升级CData SageIntacct驱动到最新正式版
旧版本驱动对SageIntacct接口后续更新的长字段值适配不全,升级到最新版后官方会修正Modulekey这类字段的默认长度定义,无需额外配置即可正常抽取数据。
注意事项
所有配置修改完成后,必须右键源组件选择刷新,重新加载元数据,同时清空数据流路径上旧的字段映射后重新配置,避免旧的元数据缓存残留导致报错复现。
这类源组件内部触发的元数据校验错误,发生在数据进入SSIS管道缓冲区之前,下游配置的任何错误重定向规则都不会生效,不用在这部分浪费排查时间。
内容的提问来源于stack exchange,提问作者user17588153
相关产品推荐
相关产品推荐

