SSIS(Dtsx)任务中插入数据前修改CSV文件列值的方法
SSIS数据流中对CSV列执行Trim操作的实现方法
不需要修改原始CSV文件,直接在数据流链路中插入转换组件即可完成处理,优先推荐维护成本最低的派生列转换方案,操作步骤如下:
- 打开对应SSIS包,进入你配置了CSV源、目标表插入的数据流任务设计面板
- 从左侧SSIS工具箱的数据流转换分类中,找到「派生列」组件,拖拽到设计面板的CSV源和目标组件之间的位置
- 选中CSV源组件,拖动其绿色输出连接线到新增的派生列组件上,让CSV读取的数据先流入派生列处理
- 双击派生列组件打开编辑器,按如下规则配置转换规则:
- 「派生列」字段的下拉选项选择
替换'[你要处理的列名]',处理后的值会直接覆盖原列,不需要额外调整映射;如果不想修改原列值,也可以选择「作为新列添加」,自定义新列名称 - 「表达式」字段输入Trim逻辑:
- 仅需去除首尾半角空格时,直接填写
TRIM([你要处理的目标列名]),注意列名需和CSV源输出的字段名完全一致,名称含特殊字符/空格时SSIS会自动为列名包裹方括号 - 如果需要同时清除首尾的制表符、换行符、全角空格等特殊空白字符,可扩展表达式为:
TRIM(REPLACE(REPLACE(REPLACE([你要处理的目标列名], "\t", ""), "\n", ""), " ", "")),可根据实际遇到的空白类型增删REPLACE逻辑
- 仅需去除首尾半角空格时,直接填写
- 数据类型属性会自动继承原列的字符串类型、长度配置,无特殊需求不需要手动修改
- 「派生列」字段的下拉选项选择
- 配置完成后点击确定保存派生列设置,删除原来CSV源直接连接到目标表组件的连接线,改为拖动派生列的绿色输出连接线到目标表组件
- 双击打开目标表组件的编辑器,检查列映射关系,确认处理后的列已正确匹配到目标表对应字段,无映射丢失、类型不匹配问题
- 保存SSIS包后执行调试,即可验证插入目标表的数据已经自动清除了对应列的首尾空白字符
如果你需要批量处理数十个列的Trim逻辑,不想逐个在派生列中配置,也可以选择两种替代方案:一是在CSV源组件的高级编辑器中,为对应字符串类型的输出字段设置Trim属性;二是使用脚本组件写C#代码批量遍历所有字符串列执行Trim。但从后续维护、问题排查的便利性考虑,列数不多的场景优先用派生列方案。
内容的提问来源于stack exchange,提问作者Marduk
相关产品推荐
相关产品推荐

