将一个字段中的整数多个值拆分为ssis

时间:2015-10-15 21:58:38

标签: c# ssis

请帮我将列的字段值拆分为多行。

ID        Name                Location        DeptNo

1         Jack                 Florida        101,102,103

我正在寻找像这样的输出

ID        Name                Location        DeptNo

1         Jack                FLorida         101
1         Jack                FLorida         102
1         Jack                FLorida         103

我已经使用脚本组件找出ssis中的配置但不确定我的代码

请检查

public class ScriptMain : UserComponent
{
public override void Input0_ProcessInputRow(Input0Buffer Row)
{

    int[] Edpt = Row.DeptNo.ToInt().Split(new int[] { ',' }, IntSplitOptions.None);

    int i = 0;

    while (i < DeptNo.Length)
    {
        Output0Buffer.AddRow();

        Output0Buffer.ID = Row.ID;
    Output0Buffer.Name = Row.Name;
        Output0Buffer.Location = Row.Location;
        Output0Buffer.DeptNo = DeptNo[i];

        i++;
    }
}
}

1 个答案:

答案 0 :(得分:2)

99%的路上。

给出像

这样的来源
SELECT
    1 AS ID        
,   'Jack' AS Name
,   'Florida' AS Location
,   '101,102,103' AS DeptNo;

您的脚本任务变为异步,因为它不会是输出缓冲区的1:1输入。我对你的剧本进行了3次修改。

第一个是创建edpt数组。可能有一种方法可以分割字符串并将结果直接转换为可以为空的整数数组但是没有想到它。

    string[] Edpt = Row.DeptNo.Split(new char[] { ',' });

第二个变化是你的for循环。 while (i < DeptNo.Length)将查看源DeptNo字符串中的每个字符。所以你会创建11个输出缓冲区(当它尝试将逗号放入一个整数时会失败(除非它将它视为char数据类型然后使用ascii值)。无论如何,要哎呀with while循环,除非你需要它们。foreach有助于消除一个错误导致的恐惧。所以,我通过我的集合(Edpt)枚举,并且对于我找到的每个值,我将它分配给一个名为{的循环范围变量{1}}

item

最后的更改是输出缓冲区中的赋值。 foreach (var item in Edpt) 再次只能访问原始字符串中的特定值(1,0,1 ,, ,, 1,0,2,等等)。相反,您希望对Output0Buffer.DeptNo = DeptNo[i];之类的分割数组进行操作但是,由于我们不需要执行任何序数访问,因此我们只需引用Output0Buffer.DeptNo = Edpt[i];

item

最终代码看起来像

        Output0Buffer.DeptNo = Int32.Parse(item);

enter image description here