0

ssis を使用して EDI 823 ロック ボックス ファイルを SQL サーバー データベースにロードする必要があります。異なる行間の親子関係を行う方法を誰か教えてください。

4

1 に答える 1

3

更新:次の回答は、単純な親子データをSQLServerにロードする例のみを示しています。

EDI 823 lockboxSSISを使用して実際のファイルをロードする方法については、このリンクを確認してください。

親子/ヘッダー詳細情報をロードするために使用できる可能なオプションは次のとおりです。

このシナリオでは、国と州に関するヘッダー詳細情報を含むフラットファイルがあります。で始まる行HDRはヘッダー行を示し、で始まる行DTLは詳細を示します。サンプルファイルの内容については、スクリーンショット#1を参照してください。

ステップバイステップのプロセス:

  1. データベース(私はSQL Serverを選択しました)で、dbo.Headerとという名前の2つのテーブルを作成しますdbo.DetailTablesこれらのテーブルの作成スクリプトについては、セクションを参照してください。このサンプルSSISパッケージを使用してフラットファイルの内容を読み取ることにより、これらのテーブルにデータを入力します。
  2. SSISパッケージで、2つのデータフロータスクをドラッグアンドドロップします。Headerそれらにとという名前を付けますDetail。スクリーンショット#2を参照して、配置方法を確認してください。
  3. 。という名前のデータ型文字列の変数を作成しますHeaderCodeHDR値を変数に割り当てます。スクリーンショット#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は長さ50のデータ型DT_STRです。左側を選択し、をクリックします。スクリプトコンポーネントのコードを、スクリプトタスクコンポーネントのセクションで使用されているコードで指定されているコードに置き換えます。ScriptEdit Script...
  8. Multicast名前が示すように、マルチキャスト変換タスクです。特別な設定はありません。
  9. Fetch Detail条件付き分割変換タスクです。このタスクを構成するには、スクリーンショット#13を参照してください。
  10. Headerは、新しく作成されたテーブルdbo.Headerに接続するように構成されたOLEDB宛先です。このタスクのフィールドマッピングは、スクリーンショット#14に示されています。
  11. StagingCSVファイルに書き込むように設定されたフラットファイルの宛先です。この接続マネージャーの構成は、スクリーンショット#15〜#16に示されます。ステージング接続マネージャーには4つの列があります。列はデータ型DT_STRCodeで、長さは255です。データ型はDT_BOOLです。長さが50のデータ型文字列です。タスクのフィールドマッピングをスクリーンショット#17に示します。ValueIsHeaderHeaderKeyStaging
  12. 次に、次のデータフロータスクに進みますDetail
  13. スクリーンショット#18に示すように、詳細データフロータスクを構成します。以下のステップ14〜16では、詳細データフロータスク内の各変換タスクについて説明します。
  14. StagingStaging手順11で作成した接続マネージャーを使用するように構成されたフラットファイルソースです。
  15. Get Header Idテーブルdbo.Headerを指すように構成されたルックアップトランスフォーメーションです。このタスクの列構成をスクリーンショット#19に示します。
  16. Detailは、新しく作成されたテーブルdbo.Detailに接続するように構成されたOLEDB宛先です。このタスクのフィールドマッピングは、スクリーンショット#20に示されています。
  17. スクリーンショット#21と#22は、データフロータスクのヘッダーと詳細の実行を示しています。
  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

于 2011-05-27T02:53:55.560 に答える