在另一列的基础上过滤一列中的数据值,然后将值插入同一SQL表中的不同列中

时间:2019-06-10 16:52:07

标签: sql-server ssis etl data-transform conditional-split

这是我要使用SSIS和条件拆分转换来解决的难题。我有一个.csv文件,其中每个唯一用户的一行包含属性数据,另一列中的每个属性包含值。即:

Attribute, Attribute Type

ID, 0000000001

Birthdate, 09/02/1976

Role, Manager

或类似的东西。我需要将属性拆分为包含“属性类型数据”的列。因此理想的结果将是:

ID,                    Birthdate,              Role,

0000000001,             09/02/1976,            Manager,

然后我需要将它们插入带有新列的一个SQL表中。

我能够通过对一列进行条件拆分转换(例如使用表达式Attribute ==“ ID”,然后将.csv源代码中的整个Attribute列映射到SQL中的ID列)来出色地完成此操作目标表),但问题在于其他列。我似乎无法实现Union All转换来完成我想要的工作。

有什么建议吗?

1 个答案:

答案 0 :(得分:1)

您可以使用脚本组件来实现:

  1. 添加脚本组件
  2. 转到“输入和输出”标签
  3. 添加3个输出列:ID,出生日期,角色
  4. 将SynchronousInput属性设置为None

enter image description here

  1. 在脚本编辑器中,编写类似的脚本:
string ID = "";
string BirthDate = "";
string Role = "";
public override void Input0_ProcessInputRow(Input0Buffer Row)
{
   if(!Row.Attribute_IsNull && !String.IsNullOrWhiteSpace(Row.Attribute))
    {

        switch (Row.Attribute)
        {

            case "ID":
                ID = Row.AttributeType;
                break;

            case "BirthDate":
                BirthDate = Row.AttributeType;
                break;

            case "Role":
                Role = Row.AttributeType;

                Output0Buffer.AddRow();
                Output0Buffer.ID = ID;
                Output0Buffer.Role = Role;
                Output0Buffer.BirthDate = BirthDate;

                break;
            default:
                break;
        }
    }
}
  1. 将“输出”列映射到OLE DB目标