Фильтрация значений данных в одном столбце на основе другого столбца, а затем вставка значений в разные столбцы в одной и той же таблице SQL - PullRequest
2 голосов
/ 10 июня 2019

Это немного загадка, которую я пытаюсь решить, используя SSIS и условно-разделенное преобразование. У меня есть файл .csv, который содержит данные атрибутов в одной строке для каждого уникального пользователя и значения для каждого атрибута в другом столбце. i.e.:

Attribute, Attribute Type

ID, 0000000001

Birthdate, 09/02/1976

Role, Manager

Или что-то в этом роде. Мне нужно разделить атрибуты на столбцы, которые включают данные типа атрибута. Таким образом, желаемый результат будет:

ID,                    Birthdate,              Role,

0000000001,             09/02/1976,            Manager,

Затем мне нужно вставить их в одну таблицу SQL с новыми столбцами.

Мне удалось это прекрасно выполнить с помощью преобразования условного разбиения для одного столбца (например, с помощью выражения Attribute == "ID" и затем сопоставления всего столбца Attribute в источнике .csv со столбцом ID в SQL). таблица назначения), но проблема заключается в этом для других столбцов. Кажется, я не могу заставить трансформацию Union All делать то, что я хочу.

Любой совет?

1 Ответ

1 голос
/ 10 июня 2019

Вы можете достичь этого, используя компонент скрипта:

  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
...