Как загрузить родительские дочерние данные, найденные в файле блокировки EDI 823, используя SSIS? - PullRequest
0 голосов
/ 26 мая 2011

Мне нужно загрузить файл блокировки EDI 823 в базу данных сервера SQl с помощью ssis.Может кто-нибудь сказать мне, как сделать отношения родитель-потомок между разными строками.

1 Ответ

3 голосов
/ 27 мая 2011

ОБНОВЛЕНИЕ: Следующий ответ показывает только пример загрузки простых parent-child данных в SQL Server.

Проверьте эту ссылку, чтобы увидеть, как загрузить фактический файл EDI 823 lockbox с использованием служб SSIS.

Вот возможный вариант, который можно использовать для загрузки сведений о родительском-дочернем / заголовке.

В этом сценарии у меня есть плоский файл, содержащий подробную информацию заголовка, относящуюся к странам и штатам.Строки, начинающиеся с HDR, обозначают строку заголовка, а строки, начинающиеся с DTL, обозначают детализацию.См. Снимок экрана # 1 для примера содержимого файла.

Пошаговый процесс:

  1. В базе данных (я выбрал SQLСервер), создайте две таблицы с именами dbo.Header и dbo.Detail.Обратитесь к разделу Tables за сценариями создания этих таблиц.Мы будем заполнять эти таблицы, читая содержимое простого файла с помощью этого примера пакета служб SSIS.
  2. В пакете служб SSIS перетащите две задачи потока данных.Назовите их как Header и Detail.Смотрите скриншот # 2 , чтобы увидеть, как они должны быть размещены.
  3. Создайте переменную строки типа данных с именем HeaderCode.Присвойте значение HDR переменной.См. Снимок экрана # 3 .
  4. Настройте задачу потока данных заголовка, как показано на снимке экрана # 4 .Ниже приведены шаги 5–11, описывающие каждую задачу преобразования внутри задачи потока данных заголовка.
  5. Read File является источником плоского файла, и он настроен для чтения файла, показанного на снимке экрана # 1.Параметры конфигурации соединения с простым файлом, используемые в этой задаче, показаны на снимках экрана # 5 - # 9
  6. Data clean up - это задача преобразования производного столбца, которая используетсяудалить все пробелы, присутствующие на входе.Смотрите скриншот # 10 .
  7. Segregate data - это задача преобразования компонента скрипта.При перетаскивании компонента сценария выберите параметр Преобразование .Обратитесь к скриншоту # 11 , чтобы узнать, как настроить Input Columns для этой задачи.Обратитесь к скриншоту # 12 , чтобы узнать, как настроить Input and Outputs для этой задачи.Выходной столбец IsHeader имеет тип данных DT_BOOL , а выходной столбец HeaderKey - тип данных DT_STR с длиной 50 .Выберите Script слева и нажмите Edit Script....Замените код в компоненте сценария кодом, указанным в Коде, используемом в разделе компонента 10 сценария .
  8. Multicast, как следует из названия, является задачей преобразования многоадресной рассылки.У него нет специальной конфигурации.
  9. Fetch Detail - это задача условного разделения разбиения.См. Снимок экрана # 13 для настройки этой задачи.
  10. Header - это назначение OLE DB, настроенное для подключения к вновь созданной таблице dbo.Header.Сопоставления полей для этой задачи показаны на снимке экрана # 14 .
  11. Staging - это назначение для плоского файла, настроенного для записи в файл CSV.Конфигурация этого диспетчера соединений показана на скриншотах # 15 - # 16 .В диспетчере промежуточных соединений есть четыре столбца.Code и Value столбцы имеют тип данных DT_STR с длиной 255 ;IsHeader относится к типу данных DT_BOOL ;HeaderKey имеет строку типа данных длиной 50 .Сопоставления полей для задачи Staging показаны на снимке экрана # 17 .
  12. Затем перейдем к следующей задаче потока данных Detail.
  13. Настройка данных сведенийЗадача потока, как показано на скриншоте # 18 .Ниже приведены шаги 14 - 16, описывающие каждую задачу преобразования внутри задачи потока данных Detail.
  14. Staging - это источник плоских файлов, настроенный для использования диспетчера соединений Staging, созданного на шаге # 11 .
  15. Get Header Id - преобразование поиска, настроенное для указания на таблицу dbo.Header.Конфигурация столбца этой задачи показана на скриншоте # 19 .
  16. Detail - это назначение OLE DB, настроенное для подключения к вновь созданной таблице dbo.Detail. Сопоставление полей для этой задачи показано на скриншоте # 20 .
  17. Снимки экрана # 21 и # 22 * ​​1143 * отображают выполнение задач потока данных Заголовок и Сведения.
  18. Снимок экрана # 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:

1

Скриншот №2:

2

Снимок экрана № 3:

2

Снимок экрана № 4:

23

Скриншот № 5:

3

Снимок экрана № 6:

4

Снимок экрана № 7:

5

Снимок экрана № 8:

6

Снимок экрана № 9:

7

Снимок экрана № 10:

8

Скриншот № 11:

9

Скриншот № 12:

10

Снимок экрана № 13:

11

Снимок экрана № 14:

12

Снимок экрана № 15:

13

Снимок экрана № 16:

14

Снимок экрана № 17:

15

Снимок экрана № 18:

16

Снимок экрана № 19:

17

Снимок экрана № 20:

18

Снимок экрана № 21:

19

Снимок экрана № 22:

20

Снимок экрана № 23:

21

...