SSIS - 将每个字符串(包括NULL)拆分为新表

时间:2015-11-03 12:59:57

标签: sql-server ssis

我有一个包含随机文本行的excel文件。其中一些只包含一个单词,其他只有多个,其他只有NULL。

现在我正在尝试在SSIS中创建一个数据流,我在其中创建一个新的表,只有ID和所有单词在一列中。

所以:

ID | Text
1  | food
2  | *NULL*
3  | tree car map
4  | water

应该成为:

ID | Text
1  | food
2  | tree
3  | car
4  | map
5  | water

我尝试过使用脚本组件(like in this link, what most people suggested on other posts here),但这不起作用。 (A pastebin link to my code and my Runtime error here

有什么方法可以解决这个问题?我希望它能在SSIS中100%完成。

2 个答案:

答案 0 :(得分:1)

问题在于如何在脚本中处理NULL值。 方法Row.Hashtags.ToString().Split(new char[] { ' ' }, StringSplitOptions.None)无法处理NULL值。

要解决此问题,我们可以在使用NULL功能之前检查Split值。用以下代码替换你的代码:

// Method that will execute for each row passing
public override void Input0_ProcessInputRow(Input0Buffer Row)
{
    //Check if the value is null before string split
    if (Row.Value_IsNull == true)
    {
        Output0Buffer.AddRow();
        Output0Buffer.SplitID = Row.ID;
        Output0Buffer.SplitValue = Row.Value;
    }
    else
    {
    string[] SplitArr = Row.Value.ToString().Split(new char[] { ' ' }, StringSplitOptions.None);

        // Counter var used the loop through the string array
        int i = 0;

        // Looping through string array with student names
        while (i < SplitArr.Length)
        {
            // Start a new row in the output
            Output0Buffer.AddRow();

            Output0Buffer.SplitID = Row.ID;

            // This is the splitted column. Take the [n] element from the array
            // and put it in the new column.
            Output0Buffer.SplitValue = SplitArr[i];

            // Increase counter to go the next value
            i++;
        }
    }
}

我使用了输入IDValue以及输出SplitIDSplitValue。将它们重命名为您的选择,但请记住将它们添加到脚本组件中。

答案 1 :(得分:0)

脚本组件绝对可以工作。但是,您发布的堆栈跟踪中不存在错误消息,因此我无法帮助您调试脚本。

我处理这个问题的方法是将Excel数据“按原样”导入到临时表中,然后使用split函数执行存储过程,将数据传递到最终目标表中。 / p>