ОБНОВЛЕНИЕ: Следующий ответ показывает только пример загрузки простых parent-child данных в SQL Server.
Проверьте эту ссылку, чтобы увидеть, как загрузить фактический файл EDI 823 lockbox
с использованием служб SSIS.
Вот возможный вариант, который можно использовать для загрузки сведений о родительском-дочернем / заголовке.
В этом сценарии у меня есть плоский файл, содержащий подробную информацию заголовка, относящуюся к странам и штатам.Строки, начинающиеся с HDR
, обозначают строку заголовка, а строки, начинающиеся с DTL
, обозначают детализацию.См. Снимок экрана # 1 для примера содержимого файла.
Пошаговый процесс:
- В базе данных (я выбрал SQLСервер), создайте две таблицы с именами
dbo.Header
и dbo.Detail
.Обратитесь к разделу Tables
за сценариями создания этих таблиц.Мы будем заполнять эти таблицы, читая содержимое простого файла с помощью этого примера пакета служб SSIS. - В пакете служб SSIS перетащите две задачи потока данных.Назовите их как
Header
и Detail
.Смотрите скриншот # 2 , чтобы увидеть, как они должны быть размещены. - Создайте переменную строки типа данных с именем
HeaderCode
.Присвойте значение HDR
переменной.См. Снимок экрана # 3 . - Настройте задачу потока данных заголовка, как показано на снимке экрана # 4 .Ниже приведены шаги 5–11, описывающие каждую задачу преобразования внутри задачи потока данных заголовка.
Read File
является источником плоского файла, и он настроен для чтения файла, показанного на снимке экрана # 1.Параметры конфигурации соединения с простым файлом, используемые в этой задаче, показаны на снимках экрана # 5 - # 9 Data clean up
- это задача преобразования производного столбца, которая используетсяудалить все пробелы, присутствующие на входе.Смотрите скриншот # 10 . Segregate data
- это задача преобразования компонента скрипта.При перетаскивании компонента сценария выберите параметр Преобразование .Обратитесь к скриншоту # 11 , чтобы узнать, как настроить Input Columns
для этой задачи.Обратитесь к скриншоту # 12 , чтобы узнать, как настроить Input and Outputs
для этой задачи.Выходной столбец IsHeader
имеет тип данных DT_BOOL , а выходной столбец HeaderKey - тип данных DT_STR с длиной 50 .Выберите Script
слева и нажмите Edit Script...
.Замените код в компоненте сценария кодом, указанным в Коде, используемом в разделе компонента 10 сценария . Multicast
, как следует из названия, является задачей преобразования многоадресной рассылки.У него нет специальной конфигурации. Fetch Detail
- это задача условного разделения разбиения.См. Снимок экрана # 13 для настройки этой задачи. Header
- это назначение OLE DB, настроенное для подключения к вновь созданной таблице dbo.Header.Сопоставления полей для этой задачи показаны на снимке экрана # 14 . Staging
- это назначение для плоского файла, настроенного для записи в файл CSV.Конфигурация этого диспетчера соединений показана на скриншотах # 15 - # 16 .В диспетчере промежуточных соединений есть четыре столбца.Code
и Value
столбцы имеют тип данных DT_STR с длиной 255 ;IsHeader
относится к типу данных DT_BOOL ;HeaderKey
имеет строку типа данных длиной 50 .Сопоставления полей для задачи Staging
показаны на снимке экрана # 17 . - Затем перейдем к следующей задаче потока данных
Detail
. - Настройка данных сведенийЗадача потока, как показано на скриншоте # 18 .Ниже приведены шаги 14 - 16, описывающие каждую задачу преобразования внутри задачи потока данных Detail.
Staging
- это источник плоских файлов, настроенный для использования диспетчера соединений Staging
, созданного на шаге # 11 . Get Header Id
- преобразование поиска, настроенное для указания на таблицу dbo.Header.Конфигурация столбца этой задачи показана на скриншоте # 19 . Detail
- это назначение OLE DB, настроенное для подключения к вновь созданной таблице dbo.Detail. Сопоставление полей для этой задачи показано на скриншоте # 20 .
- Снимки экрана # 21 и # 22 * 1143 * отображают выполнение задач потока данных Заголовок и Сведения.
- Снимок экрана # 23 отображает данные, загруженные в таблицу.
Надеюсь, это поможет.
Код, используемый в компоненте задачи сценария (Упомянуто на шаге № 7 выше) :
C # код, который можно использовать только в SSIS 2008 and above
.
,
/*Microsoft SQL Server Integration Services Script Component
* Write scripts using Microsoft Visual C# 2008.
* ScriptMain is the entry point class of the script.*/
using System;
using System.Data;
using Microsoft.SqlServer.Dts.Pipeline.Wrapper;
using Microsoft.SqlServer.Dts.Runtime.Wrapper;
[Microsoft.SqlServer.Dts.Pipeline.SSISScriptComponentEntryPointAttribute]
public class ScriptMain : UserComponent
{
string currentValue = string.Empty;
string previousHeader = string.Empty;
public override void PreExecute()
{
base.PreExecute();
}
public override void PostExecute()
{
base.PostExecute();
}
public override void Input0_ProcessInputRow(Input0Buffer Row)
{
IDTSVariables100 varCollection = null;
this.VariableDispenser.LockForRead("User::HeaderCode");
this.VariableDispenser.GetVariables(out varCollection);
currentValue = Row.ValueTrimmed.ToString();
if (Row.CodeTrimmed.ToString() == varCollection["User::HeaderCode"].Value.ToString())
{
Row.IsHeader = true;
if (previousHeader != currentValue)
{
previousHeader = currentValue;
}
}
Row.HeaderKey = previousHeader;
varCollection.Unlock();
}
}
Таблицы:
.
CREATE TABLE [dbo].[Detail](
[DetailId] [int] IDENTITY(1,1) NOT NULL,
[Name] [varchar](255) NOT NULL,
[HeaderId] [int] NOT NULL,
CONSTRAINT [PK_Detail] PRIMARY KEY CLUSTERED
(
[DetailId] ASC
)) ON [PRIMARY]
GO
CREATE TABLE [dbo].[Header](
[HeaderId] [int] IDENTITY(1,1) NOT NULL,
[Name] [varchar](255) NOT NULL,
CONSTRAINT [PK_Header] PRIMARY KEY CLUSTERED
(
[HeaderId] ASC
)) ON [PRIMARY]
GO
Скриншот № 1:
Скриншот №2:
Снимок экрана № 3:
Снимок экрана № 4:
Скриншот № 5:
Снимок экрана № 6:
Снимок экрана № 7:
Снимок экрана № 8:
Снимок экрана № 9:
Снимок экрана № 10:
Скриншот № 11:
Скриншот № 12:
Снимок экрана № 13:
Снимок экрана № 14:
Снимок экрана № 15:
Снимок экрана № 16:
Снимок экрана № 17:
Снимок экрана № 18:
Снимок экрана № 19:
Снимок экрана № 20:
Снимок экрана № 21:
Снимок экрана № 22:
Снимок экрана № 23: