Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SSIS数据转换-行到列_Ssis_Script Component - Fatal编程技术网

SSIS数据转换-行到列

SSIS数据转换-行到列,ssis,script-component,Ssis,Script Component,我有一个目前ssis项目的情况。我有一个巨大的客户数据excel。这两列具有客户数据的标识符。像下面这样。其余列具有实际数据 COLUMN A | COLUMN B -------------------- NAME | XYZ ADDRESS1 | 1 STREET ADDRESS2 | APT A ZIP | 12345 挑战在于将值读入变量或列。这是执行验证所必需的。转换后,我需要以下格式的数据 NAME | ADDRESS1 | ADDRESS2 | ZIP

我有一个目前ssis项目的情况。我有一个巨大的客户数据excel。这两列具有客户数据的标识符。像下面这样。其余列具有实际数据

COLUMN A | COLUMN B
--------------------
NAME     | XYZ
ADDRESS1 | 1 STREET
ADDRESS2 | APT A    
ZIP      | 12345
挑战在于将值读入变量或列。这是执行验证所必需的。转换后,我需要以下格式的数据

NAME | ADDRESS1 | ADDRESS2 | ZIP
--------------------------------------
XYZ  | 1 STREET | APT A    | 12345
我可能无法使用Pivot转换,因为此数据是使用动态列的脚本组件读取的。有谁能为我提供一个解决方案吗?
谢谢你的时间。

没有现成的东西能帮你。您面临的挑战是键值数据具有隐式分组。也就是说,每次看到
Name
键时,接下来的N行都会关联回起始行


因为您已经从脚本任务中读取了数据,所以请做有意义的事情,不要在KVP中输出,而是将输出缓冲区重新定义为Name、Address1、Address2、Zip,并具有适当的长度。然后,在脚本任务中,在到达文件末尾或遇到名称行之前,不要实际调用
AddRow()
方法

使用脚本组件。代码如下所示。假设:没有缺少的字段值。这段代码将帮助您开始。之后,您需要根据您的特殊要求对其进行调整

public class ScriptMain : UserComponent
{
string name = string.Empty;
string address1 = string.Empty;
string address2 = string.Empty;
string zip = string.Empty;

public override void PreExecute()
{
    base.PreExecute();
}
public override void PostExecute()
{
    base.PostExecute();
 }
public override void Input0_ProcessInputRow(Input0Buffer Row)
{
    if (Row.Key.ToUpper().Equals("NAME"))
    {
        name = Row.Value;
    }
    else if (Row.Key.ToUpper().Equals("ADDRESS1"))
    {
        address1 = Row.Value;
    }
    else if (Row.Key.ToUpper().Equals("ADDRESS2"))
    {
        address2 = Row.Value;
    }
    else if (Row.Key.ToUpper().Equals("ZIP"))
    {
        zip = Row.Value;

        OutputRowBuffer.AddRow();
        OutputRowBuffer.Name = name;
        OutputRowBuffer.Address1 = address1;
        OutputRowBuffer.Address2 = address2;
        OutputRowBuffer.Zip = zip;           
    }
}
}