ssis を使用して EDI 823 ロック ボックス ファイルを SQL サーバー データベースにロードする必要があります。異なる行間の親子関係を行う方法を誰か教えてください。
1 に答える
更新:次の回答は、単純な親子データをSQLServerにロードする例のみを示しています。
EDI 823 lockbox
SSISを使用して実際のファイルをロードする方法については、このリンクを確認してください。
親子/ヘッダー詳細情報をロードするために使用できる可能なオプションは次のとおりです。
このシナリオでは、国と州に関するヘッダー詳細情報を含むフラットファイルがあります。で始まる行HDR
はヘッダー行を示し、で始まる行DTL
は詳細を示します。サンプルファイルの内容については、スクリーンショット#1を参照してください。
ステップバイステップのプロセス:
- データベース(私はSQL Serverを選択しました)で、
dbo.Header
とという名前の2つのテーブルを作成しますdbo.Detail
。Tables
これらのテーブルの作成スクリプトについては、セクションを参照してください。このサンプルSSISパッケージを使用してフラットファイルの内容を読み取ることにより、これらのテーブルにデータを入力します。 - SSISパッケージで、2つのデータフロータスクをドラッグアンドドロップします。
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は長さ50のデータ型DT_STRです。左側を選択し、をクリックします。スクリプトコンポーネントのコードを、スクリプトタスクコンポーネントのセクションで使用されているコードで指定されているコードに置き換えます。Script
Edit Script...
Multicast
名前が示すように、マルチキャスト変換タスクです。特別な設定はありません。Fetch Detail
条件付き分割変換タスクです。このタスクを構成するには、スクリーンショット#13を参照してください。Header
は、新しく作成されたテーブルdbo.Headerに接続するように構成されたOLEDB宛先です。このタスクのフィールドマッピングは、スクリーンショット#14に示されています。Staging
CSVファイルに書き込むように設定されたフラットファイルの宛先です。この接続マネージャーの構成は、スクリーンショット#15〜#16に示されています。ステージング接続マネージャーには4つの列があります。列はデータ型DT_STRCode
で、長さは255です。データ型はDT_BOOLです。長さが50のデータ型文字列です。タスクのフィールドマッピングをスクリーンショット#17に示します。Value
IsHeader
HeaderKey
Staging
- 次に、次のデータフロータスクに進みます
Detail
。 - スクリーンショット#18に示すように、詳細データフロータスクを構成します。以下のステップ14〜16では、詳細データフロータスク内の各変換タスクについて説明します。
Staging
Staging
手順11で作成した接続マネージャーを使用するように構成されたフラットファイルソースです。Get Header Id
テーブルdbo.Headerを指すように構成されたルックアップトランスフォーメーションです。このタスクの列構成をスクリーンショット#19に示します。Detail
は、新しく作成されたテーブルdbo.Detailに接続するように構成されたOLEDB宛先です。このタスクのフィールドマッピングは、スクリーンショット#20に示されています。- スクリーンショット#21と#22は、データフロータスクのヘッダーと詳細の実行を示しています。
- スクリーンショット#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: