已解决:SSIS中SQLBulkCopy列映射与源/目标列不匹配报错
SSIS 夜间运行 SQLBulkCopy 随机报错修复方案
问题现象
- 夜间调度运行SSIS包时触发SQLBulkCopy相关报错,60张待处理表中每日随机有5-12张执行失败,每日失败的表无固定规律
- 对账流程仅读取
ID、CreatedDate两个字段,已反复校验确认源端、目标端的列定义完全一致
环境差异
共部署生产、测试2套环境,两套环境的SSIS包逻辑、表名、表结构、字段类型完全一致,仅生产环境复现报错,测试环境全量运行正常。
核心报错信息
1. Main:Error: Error : column ID Invalid column type from bcp client for colid 1. at System.Data.SqlClient.SqlConnection.OnError (SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction) 2. Main:Error: Error : The given ColumnMapping does not match up with any column in the source or destination. at System.Data.SqlClient.SqlBulkCopy.AnalyzeTargetAndCreateUpdateBulkCommand(BulkCopySimpleResultSetinternalResults)
根因
代码通过SQLBulkCopy写入数据时创建的临时表命名重复,多表处理流程中临时表被互相混淆,触发列映射不匹配、列类型无效的报错。
测试环境不复现的逻辑非常明确:测试环境数据量小,任务调度密度低,多表处理时序完全错开,不会触发临时表重名冲突;生产环境夜间任务集中调度,表处理时序重叠时就会随机触发问题。
修复方案
给每个待处理表生成唯一命名的临时表(可拼接表名标识、任务唯一ID/Guid后缀),避免数据库侧识别到重名临时表产生混淆,即可彻底解决该随机报错问题。
内容的提问来源于stack exchange,提问作者Sebs Answers
相关产品推荐
相关产品推荐

