SSISパッケージを使用して固定幅のフラットファイルをデータベースにインポートする方法に関するチュートリアルはありますか?
さまざまな長さの列を含むフラットファイルがあります。
Column name Width
----------- -----
First name 25
Last name 25
Id 9
Date 8
フラットファイルを列に変換するにはどうすればよいですか?
以下は、SSIS 2008 R2を使用して作成されたサンプルパッケージで、フラットファイルをデータベーステーブルにインポートする方法を説明しています。
Fixed_Width_File.txt
という名前の固定幅フラットファイルにデータを作成します。スクリーンショットは、Notepad ++を使用してファイルの内容を表示します。復帰や改行などの特殊文字を表示する機能があります。 CR LF
は、行区切り文字キャリッジリターンおよび改行を示します。SQLサーバーデータベースで、SQL Scriptsセクションで提供される作成スクリプトを使用して、dbo.FlatFile
という名前のテーブルを作成します。
新しいSSISパッケージを作成し、SQL Serverデータベースに接続する新しいOLE DB接続マネージャーを追加します。OLE DB接続マネージャーの名前はasSQLServer。
データフロータスクをダブルクリックすると、データフロータブが表示されます。 [データフロー]タブで、Flat File Sourceを配置します。フラットファイルソースをダブルクリックすると、Flat File Source Editorが表示されます。 Newボタンをクリックして、Flat File Connection Manager Editorを開きます。
Flat File Source EditorのGeneralセクションで、Connection manager name(たとえばSource)およびフラットファイルの場所を参照し、ファイルを選択します。この例では、パスC:\temp\Fixed_Width_File.txt
のサンプルファイルを使用します。ファイルにヘッダー行がある場合、ヘッダー行に値1を入力して、テキストボックスをスキップしてヘッダー行をスキップできます。
69
を入力します。この値は、すべての列の幅の合計+行区切り文字の2です。正しい行幅を設定すると、ソースデータの列セクションに固定幅のファイルデータが正しく表示されます。ここで、適切な場所をクリックして列の制限を決定する必要があります。以下のスクリーンショットのセクション4、5、6およびに注意してください。FirstName
、LastName
、Id
、Date
およびRowDelimiter
に名前変更します。Id
列をデータ型four-byte signed integer [DT_I4]
に変更し、Date列をデータ型date [DT_DATE]
に変更しますRowDelimiter
のチェックを外します。これは必要ないからです。OLE DB Destination
を配置します。フラットファイルソースからの出力をOLE DB Destinationに接続します。SQLServer
という名前のOLE DB Connection managerを選択し、テーブルまたはビューの名前ドロップダウン[dbo].[FlatFile]
このサンプルは、固定幅のフラットファイルをデータベースにインポートする方法についてのアイデアを提供するはずです。エラーロギングの処理方法については説明しませんが、これを使用すると、パッケージを操作するときに使い始めることができ、他のSSIS関連機能を発見するのに役立ちます。
お役に立てば幸いです。
SQL Scripts
:
CREATE TABLE [dbo].[FlatFile](
[Id] [int] NOT NULL,
[FirstName] [varchar](25) NOT NULL,
[LastName] [varchar](25) NOT NULL,
[Date] [datetime] NOT NULL
)
非常によく説明されています、シバ!あなたのチュートリアルと優れたイラストは、マイクロソフトが明らかにすべきであったことを指摘しています
これらの2つのことがなければ、インポートを実行しようとすると、次のエラーメッセージが表示されます。列「列x」のデータ変換はステータス値4とステータステキスト「テキストが切り捨てられたか、1つ以上の文字がターゲットコードページ。 "。
誰かがエラーの原因を探しているときにこのページを見つけることを期待して、このエラーテキストに追加しました。事後であっても、あなたのTurorialは見つける価値があります!
派生列変換では、各列にSUBSTRING()関数を使用できます。 例:
列DerivedColumn
FirstName SUBSTRING(Data、startFrom、Length);
ここで、FirstNameの幅は25です。そのため、0番目から派生列でSUBSTRING(Data、0、25)を指定して指定する必要があると考えた場合、
他の列についても同様です。