0

我在当前的 ssis 项目中有一个情况。我在客户数据方面拥有巨大的优势。2 列具有客户数据的标识符。像下面的东西。其余列有实际数据。

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 转换,因为此数据是使用动态列的脚本组件读取的。任何人都可以为我提供一个解决方案吗?谢谢你的时间。

4

2 回答 2

0

开箱即用的任何东西都不会帮助您。您面临的挑战是您的键值对数据具有隐式分组。也就是说,每次您看到该Name键时,接下来的 N 行都会与开始行相关联。

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

于 2013-10-22T19:09:42.587 回答
0

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

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;           
    }
}

}

于 2013-10-23T16:17:08.870 回答