2017-10-30 8 views
2

ファイルをいくつかのデータベーステーブルにインポートする必要があります。ファイルはこのようないくつかの同時フォーマット、含まれています実際にマルチフォーマット区切りファイルのインポート

901 
902|1|Id|Name|Age 
902|2|Id|Region|Address 
902|3|Id|ProductName|ProductType|Price 
903 
1||Adam Sandler|40 
1||Phil Collins|50 
1||Fred Mason|22 
2||Southwest|4000 Cactus Ln. 
2||Northwest|5000 Seahawk Ln. 
3||Surf board|recreation|$30.00 

を、このファイルの「ヘッダ」(「902」接頭辞ライン)文書タイプ1、2(文書の種類が含まれているかを示し、そして3)と各文書にどの列名/数量があるかを示します。次に、ファイルは実際のデータを提供します( '903'指定子の後に始まります)。

SSIS(SQL Server 2016)を使用してデータをインポートする必要がありますが、SSISに組み込みの機能がないようです。だから私はこれにアプローチする方法の提案を聞きたい。

すぐに私はcreate a custom SSIS source componentと思っています。おそらく、そのカスタムアプローチによって、私はどのドキュメントタイプ(#1、#2、または#3)をインポートしたいのかを示すdoc-typeプロパティを定義することができ、カスタムC#コードは重い作業を行います。

これは良いアプローチですか?より良いアプローチがありますか?私はC#で非常に強いです。

+0

... DBの "空の"テーブルにインポートし、 'WHERE SUBSTRING(column、1,1)= '1''の文を実行しますか? –

答えて

0

コメントするには長すぎます。

私は、アップロードする前にC#やPython、バッチなどを使ってファイルを分割しています。

たとえば、#1のファイル1つ、#2のファイル1つなどです。このアドバイスの理由は、任意の表に単一の文書タイプ(ヘッダーの説明どおり)を挿入することだけです。したがって、インポート時には、ファイルに挿入するテーブルに必要なデータのみを持つことをお勧めします。私は実際にそうでなければそれを行うのきれいな方法を考えることはできません。したがって、ファイル1をTable1にインポートし、ファイル2をTable2にインポートします。

を使用しない場合は、このためにSSISを使用する必要はありません。を使用することはできますが、

0

BULK

CREATE TABLE #FileContent (Line varchar(2000)); 
    SET @sql='BULK INSERT #FileContent FROM '''[email protected]+''' WITH (ROWTERMINATOR ='''+CHAR(10)+''')' 
    PRINT @sql 
    EXEC(@sql) 

有する線は、異なるテーブルに各形式の行を取る 列にラインデータを分割する分割機能を使用するように通常、私はロード。

関連する問題