首页 > 解决方案 > 处理数据流任务中派生列中的截断错误

问题描述

我有一个包含派生列的数据流任务。派生列将 CSV 文件列(例如订单号 A)转换为长度为 10 的数据类型 char。

当文本文件列等于或小于 10 个字符时,这非常有效。当然,A列订单号超过10个字符时会报错。

A 列(容易出错)。

12PR567890 
254W895X98 
ABC 56987K5239
485P971259 SPTGER
459745WERT

我想捕获容易出错的记录并仅提取订单号。

我已经可以配置派生列的错误输出。但是,这只是忽略错误记录并处理其他记录。

预期的输出将分别处理,ABC 56987K5239订单485P971259 SPTGER号。删除意外字符的过程并不重要,重要的是如何在派生列的运行时实现这一点(在出现错误时剥离和处理数据)。56987K5239485P971259

标签: sql-servercsvssisflat-filederived-column

解决方案


如果有效的订单号总是以数字开头,并且它的长度等于 10。您可以使用Script Component(Transformation)Regular Expression来转换源数据。

  1. 拖放Script ComponentasTransformation
  2. 将源连接到Script Component
  3. Script Component Edit窗口中,Order从中检查Input columns,并将其设为Read and Write
  4. 在脚本中,添加:using System.Text.RegularExpressions;
  5. 完整的代码需要在 Input 处理方法中添加:

    string pattern = "[0-9].{9}";
    Row.Order = Regex.Match(Row.Order, pattern).Groups[1].ToString();
    
  6. 到目的地的输出应该是匹配的以数字开头的 10 个字符。


推荐阅读