Фильтрация значений данных в одном столбце на основе другого столбца, а затем вставка значений в разные столбцы в одной и той же таблице SQL
Это немного загадка, которую я пытаюсь решить с помощью SSIS и преобразования условного разбиения. У меня есть файл.csv, который содержит данные атрибутов в одной строке для каждого уникального пользователя и значения для каждого атрибута в другом столбце. то есть:
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). но проблема заключается в том, чтобы сделать это для других столбцов. Кажется, я не могу заставить трансформацию Союза Всех делать то, что я хочу.
Любой совет?
1 ответ
Вы можете добиться этого, используя компонент скрипта:
- Добавить компонент скрипта
- Перейти на вкладку Входы и выходы
- Добавить 3 выходных столбца: идентификатор, дата рождения, роль
- Установите для свойства SynchronousInput значение
None
- Внутри редактора скриптов напишите похожий скрипт:
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;
}
}
}
- Сопоставьте столбцы вывода с назначением OLE DB