ConvertRowsTocolumns 使用 SSIS

ConvertRowsTocolumns Using SSIS

我必须从平面文件中提取数据并加载到登台数据库中

ex:我有这个没有列 header 的平面文件,我想将每一行放入一个单独的列中 文本文件数据:这是实际格式

01008012603181700250318
02010691700001988800000000000000000000000
51X11055907014X10000002200000000220000000003671100000000001124000000002110559070145
51X61630051007X10000000005000000000500000000016100000000009999000000002616300510071
60350000002205000000000002
02010691713001988900000000000000000000000
51X08042508025X10000001000000000100000000001670800000000000806000000002080425080250
51X08040547025X10000001000000000100000000001670800000000000806000000002080405470255
60350000002000000000000002
02011511724001989000000000000000000000000
112997241682493       01          
51X08066360013X10000002200000000170000000002830800000000000806000000002080663600135
53-00000050098234151  00
112997241682493       01          
51X08061643013X10000001500000000150000000002500800000000000806000000002080616430130
683000000000000000000000000
60350000003200000000000002
01008022603181734250318
160206917349000002B26031802
6724-000004400000000000002
320206917340201Y180326
3301000005321500000532150000000000000000000002

条件: left (col,2) = 01 进入一列,left(col,02) 进入另一列..等等 我必须像这样通读多个平面文件。列名类似于 column01、column02、column51。在这种情况下,01 仍然是任何多行的主列。我需要像这样遍历至少 100 个文件。

示例输出

Col01                          col2                                                Col3
01008012603181700250318        02010691700001988800000000000000000000000       51X11055907014X10000002200000000220000000003671100000000001124000000002110559070145

更新 1:按照@Tab Alleman 的建议,我已将所有文本加载到 SQL table 中的单列中。我曾尝试通过 string_split 函数拆分行,但无法获得结果。分隔符是一个space,但有些行数据有多个space。我也尝试过创建 string_split 函数发布在堆栈中。

例如:01594022603181352250318 02027061352002288200000000000000000000000 112997232009865 01 51X06082082020X10000000600000000054000000000900600000000000601000000002060820820200 56-00000006012 00 112997232009865 01

如果您真的希望整个文件只生成一行,您只需将 CRLF 字符(或任何文件的行终止符)设置为平面文件连接中的列定界符。文件的每一行都将成为数据流中的一列。

我有一个脚本任务可以帮助你。虽然它有几个步骤

  1. 将您的数据加载到列名数据中。

  2. 添加脚本组件转换

  3. 在输入选项卡上 - Select 数据为只读
  4. 在 input/output 上添加您期望的输出 Col1、Col2... 我将它们全部设置为 varchar(500)
  5. 添加以下脚本 (C#)

int rn = 0;

字符串 Col1;

字符串列 2;

字符串 Col3;

字符串 Col4;

public override void Input0_ProcessInputRow(Input0Buffer Row)
{
    rn++;
    Col1 = Row.data;
    while (Row.NextRow())
    {
        rn++;
        switch (rn)
        {
            case 2:
                Col2 = Row.data;
                break;
            case 3:
                Col3 = Row.data;
                break;
            case 4:
                Col4 = Row.data;
                //Add transposed data on last row
                FlippedBuffer.AddRow();
                FlippedBuffer.Col01 = Col1;
                FlippedBuffer.Col2 = Col2;
                FlippedBuffer.Col3 = Col3;
                FlippedBuffer.Col4 = Col4;
                break;
        }
    }

}

注意以下几点:

  1. 变量在 ProcessInputRow 脚本之外声明
  2. 读取最后一行时创建新行。
  3. 我无法让变量在格式设置中显示为代码。
  4. 您需要将所有列添加到输出、变量声明和开关中。