Sql server 在数据流任务中处理派生列中的截断错误
我有一个包含派生列的数据流任务。派生列将CSV文件列(例如订单号)转换为长度为10的数据类型char 当文本文件列的长度等于或小于10个字符时,此操作非常有效。当然,当列的订单号超过10个字符时,它会抛出一个错误 列A(容易出错) 我想捕捉容易出错的记录并仅提取订单号 我已经可以从派生列配置错误输出。但是,这只会忽略错误记录并处理其他错误记录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的订单号。删除
预期输出将分别处理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();
使用什么逻辑?你怎么知道
485P971259
是订单号而不是SPTGER
?我不知道。但现在我只需要取下485P971259(10个字符长)并移除SPTGER就足够了。但我如何在派生列的运行时执行此操作呢?虽然我在派生列和错误配置中寻找更简单的方法,但这也可以工作,并且我认为派生列没有这样的方法。谢谢:)
string pattern = "[0-9].{9}";
Row.Order = Regex.Match(Row.Order, pattern).Groups[1].ToString();