我有一个包含随机文本行的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%完成。
答案 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++;
}
}
}
我使用了输入ID
和Value
以及输出SplitID
和SplitValue
。将它们重命名为您的选择,但请记住将它们添加到脚本组件中。
答案 1 :(得分:0)
脚本组件绝对可以工作。但是,您发布的堆栈跟踪中不存在错误消息,因此我无法帮助您调试脚本。
我处理这个问题的方法是将Excel数据“按原样”导入到临时表中,然后使用split函数执行存储过程,将数据传递到最终目标表中。 / p>