如何在SSIS 2022派生列中提取最后两个方括号间的字符串
在SSIS数据流中通过派生列转换提取错误列名
在SSIS数据流里提取错误列名一直是公认的难题。由于要求尽量减少脚本转换/组件,无法使用复杂脚本方案识别错误列,不过通过两行C#代码已能获取Data Viewer中显示的错误列描述(例如OLEDB_DEST - Load Raw Dimension.Inputs[OLE DB Destination Input].Columns[ProductID]),代码如下:
public override void Input0_ProcessInputRow(Input0Buffer Row) { // 获取错误描述 Row.ErrorDescription = this.ComponentMetaData.GetErrorDescription(Row.ErrorCode); // 获取错误列标识字符串 IDTSComponentMetaData130 componentMetaData = this.ComponentMetaData as IDTSComponentMetaData130; Row.ErrorColumnName = componentMetaData.GetIdentificationStringByID(Row.ErrorColumn); }
现在需要通过派生列转换,从上述字符串中稳定提取最后一对方括号之间的列名(如示例中的ProductID),此前尝试使用SUBSTRING和FINDSTRING未成功,以下是可行的解决方案:
派生列表达式
结合REVERSE、FINDSTRING和SUBSTRING即可实现,核心思路是通过反转字符串简化“找最后一对方括号”的逻辑,具体表达式如下:
REVERSE(SUBSTRING(REVERSE([ErrorColumnName]), FINDSTRING(REVERSE([ErrorColumnName]), "[", 1) + 1, FINDSTRING(REVERSE([ErrorColumnName]), "]", 1) - FINDSTRING(REVERSE([ErrorColumnName]), "[", 1) - 1))
表达式逻辑说明:
REVERSE([ErrorColumnName]):将错误列标识字符串反转,把原字符串末尾的方括号部分移到开头,便于定位FINDSTRING(REVERSE([ErrorColumnName]), "[", 1):找到反转后第一个[的位置,对应原字符串最后一个]的位置FINDSTRING(REVERSE([ErrorColumnName]), "]", 1):找到反转后第一个]的位置,对应原字符串最后一个[的位置SUBSTRING(...):从反转后的字符串中截取两个符号之间的内容,最后再反转回来,得到目标列名
内容的提问来源于stack exchange,提问作者libpekin1847
相关产品推荐
相关产品推荐

