4

我在 SQL Server 中有一个包含 3 列的表,其中一个是包含由逗号分隔的连接列的行的数据列。第一行也是我要创建的新表的标题行。所以基本上我想把这个。

Data      | ID | Source 
====================
a,b,c,d,e | 1  | a.csv

f,g,h,i,j | 2  | b.csv

进入

a | b | c | d | e
=================
f | g | h | i | j

使用 SSIS,我能想到的唯一方法是使用转储到数据列的文本文件中,然后将其作为平面文件源重新读取,但我宁愿避免创建额外的不必要文件

编辑:对不起我使用 SSIS 2008

4

2 回答 2

4

您可以做的是按原样读取文件。并在脚本任务中拆分这些值。

因此,从源代码转到脚本任务。然后在作为输入列的脚本任务中,选择包含这些值的列 (InputColumn1)。然后指定输出列(如果我是对的,我看到你有 5,所以指定 5 (OutputColumn1 - 5))。

完成后,转到脚本本身 (C#)。

在下面:

public override void Input0_ProcessInputRow(Input0Buffer Row)
{
}

将以下代码放入其中:

var ColumnValue = Row.InputColumn1.Split(',');

Row.OutputColumn1 = ColumnValue[0];
Row.OutputColumn2 = ColumnValue[1];
Row.OutputColumn3 = ColumnValue[2];
Row.OutputColumn4 = ColumnValue[3];
Row.OutputColumn5 = ColumnValue[4];

在脚本任务之后,Source 中的所有列以及 OutputCoulmns1-5 都将可用,您可以做您必须做的事情。

输出

 Data      | ID | Source |OutputColumn1 |OutputColumn2|  etc. 3-5
 ================================================================
 a,b,c,d,e | 1  | a.csv  |  a           |  b

 f,g,h,i,j | 2  | b.csv  |  f           |  g

请询问是否有不清楚的地方。

于 2013-10-29T12:55:01.813 回答
3

您可以使用Token表达式来隔离由井分隔符分隔的字符串。

使用 aderived column transformation和类似的东西:

TOKEN([Name_of_your_Column], "," , 1)

应该给你“一个”

TOKEN([Name_of_your_Column], "," , 2)

应该给你“b”

您还可以设置一个简单的转换 script component。使用您的“数据”列作为输入,并根据需要添加尽可能多的输出。使用split方法就可以了。

string[] myNewColumns = inputColumn.split(",");

于 2013-10-29T09:44:42.287 回答