特殊符号避免在ssis

时间:2014-05-09 05:09:43

标签: ssis

我对ssis有一点怀疑。请告诉我如何解决这个问题

源表:emp id,名称有数据类型varchar(30),sal money

             id|  name |  sal 
             1 |  abc   |100
            ,2"|  def   |2500
             3 |  ",rac"|1400
             4 |  ven   |200
           "5",|  jai   |100
             10|  ha    |50

当我们将这些数据加载到目标表时,我们需要加载正确的数据

目标表数据类型也是id,名称有dataype varchar(30),sal money

目标表数据想要如下所示

目标表:emptarg

              id   |  name  | sal
              1   |  abc   |100
              4   | ven    |200
              10  |  ha    | 50

和errore记录加载到单独的表

     error table:emperror 
                           id  | name   | sal
                           ,2" |  def   |2500
                            3  |  ",rac"|1400
                           "5",|  jai   |100

当源数据具有特殊的symoble时,记录需要发送错误表。如何在条件拆分中以任何其他方式写入条件。

1 个答案:

答案 0 :(得分:0)

由于您需要匹配多个字符,我建议使用以下方法;

  1. 创建脚本转换。
  2. 从源表创建与输入列对应的必要输出列。再添加一个名为bool的{​​{1}}类型的输出列。
  3. IsValid脚本方法中,使用模式匹配来检查ProcessInputRow列是否仅包含数字,而id列仅包含字母。如果不是这种情况,请将name设置为IsValid

    false
  4. 接下来添加using System.Text.RegularExpressions; ... public class ScriptMain : UserComponent { bool isValid = true; ... public override void Input0_ProcessInputRow(Input0Buffer Row) { if (Regex.IsMatch(Row.id, @"^[0-9]+$") && Regex.IsMatch(Row.name, @"^[a-zA-Z]+$")) { Row.derivedid = int.Parse(Row.id); Row.derivedname = Row.name; } else { isValid = false; } Row.IsValid = isValid; } } 转换,并根据Conditional Split是true还是false,将行重定向到相应的目标。