根据另一列过滤一列中的数据值,然后将值插入同一列中的不同列 SQL Table

Filtering data values in one column based on another column and then inserting values into different columns in same SQL Table

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

Attribute, Attribute Type

ID, 0000000001

Birthdate, 09/02/1976

Role, Manager

或者类似的东西。我需要将属性拆分为包含属性类型数据的列。所以期望的结果是:

ID,                    Birthdate,              Role,

0000000001,             09/02/1976,            Manager,

然后我需要将它们插入一个 SQL table 和新列中。

我能够通过对一列进行条件拆分转换(例如使用表达式 Attribute == "ID",然后将 .csv 源中的整个 Attribute 列映射到 ID SQL 目的地 table 中的列),但问题是对其他列这样做。我似乎无法进行 Union All 转换来做我想做的事。

有什么建议吗?

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

  1. 添加脚本组件
  2. 转到“输入和输出”选项卡
  3. 添加 3 个输出列:ID、出生日期、角色
  4. 将同步输入 属性 设置为 None

  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 目标