Sql server 在数据流任务中处理派生列中的截断错误

Sql server 在数据流任务中处理派生列中的截断错误,sql-server,csv,ssis,flat-file,derived-column,Sql Server,Csv,Ssis,Flat File,Derived Column,我有一个包含派生列的数据流任务。派生列将CSV文件列(例如订单号)转换为长度为10的数据类型char 当文本文件列的长度等于或小于10个字符时,此操作非常有效。当然,当列的订单号超过10个字符时,它会抛出一个错误 列A(容易出错) 我想捕捉容易出错的记录并仅提取订单号 我已经可以从派生列配置错误输出。但是,这只会忽略错误记录并处理其他错误记录 预期输出将分别处理ABC 56987K5239、485P971259 SPTGER、56987K5239和485P971259 SPTGER的订单号。删除

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

当文本文件列的长度等于或小于10个字符时,此操作非常有效。当然,当列的订单号超过10个字符时,它会抛出一个错误

列A(容易出错)

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

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


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

如果有效订单号始终以数字开头,且其长度等于10。您可以使用
脚本组件
(转换)和
正则表达式
来转换源数据

  • 脚本组件
    拖放为
    转换
  • 将源连接到
    脚本组件
  • 脚本组件编辑
    窗口中,检查
    输入列
    中的
    顺序
    ,并将其设置为
    读写
  • 在脚本中,添加:
    使用System.Text.RegularExpressions
  • 需要在输入过程方法中添加完整代码:

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


  • 使用什么逻辑?你怎么知道
    485P971259
    是订单号而不是
    SPTGER
    ?我不知道。但现在我只需要取下485P971259(10个字符长)并移除SPTGER就足够了。但我如何在派生列的运行时执行此操作呢?虽然我在派生列和错误配置中寻找更简单的方法,但这也可以工作,并且我认为派生列没有这样的方法。谢谢:)
    string pattern = "[0-9].{9}";
    Row.Order = Regex.Match(Row.Order, pattern).Groups[1].ToString();