ExcelからSQL Serverへのインポート

asp.net bulkinsert sqlbulkcopy sql-server ssis

質問

SQL ServerにExcelデータをインポートするタスクがあります。 Excelデータは、Excelテンプレートから得られます。さまざまなクレンジングに使用できるさまざまなExcelテンプレートがありますので、Excelの列はすべてのテンプレートにわたって同じではありません。データはSQ1の1つの共通テーブルにインポートする必要があります。

私はグーグルで、ネット上で利用可能な多くのサンプルがたくさんありますが、どの方法が最良の方法であるかはわかりません。

私はテンプレートの動的な列を考慮して上記を達成する方法について私にご案内をお願いします。

Excelのテンプレートでは、開始行と終了行は固定されていません。

受け入れられた回答

SSIS

SSISパッケージ内のデータを移動するための主なData Flow TaskであるData Flow Taskは、ソースプロバイダのメタデータに密接に関連しています。 1つのソースにstring、int、stringがあり、次の文字列にstring、string、string、stringがある場合、メタデータは同じデータフロー内のその作業では大きく異なってしまいます。整数データを文字列に変換することはできます 、列数の違いを克服することはできません。

あなたのケースでは、これらのスプレッドシートから統合テーブルに送られるデータに適用するために非常に複雑なビジネスロジックがない限り、おそらくN + 1パッケージを設計することになります。あなたが受け取る可能性のあるExcel形式ごとのパッケージ。私は、ファイルがどのテンプレート(ClientAV1.xlsx、ClientBV2.xlsxなど)から供給されたかを判断するロジックがあると仮定しています。これらのパッケージには、Excel Source to OLE DB Destinationというデータフローがあります。最終的なパッケージは、親/コントローラ/マスターパッケージになります。それは利用可能なファイルに基づいて他のパッケージの調整を処理します。

C#

あなたはasp.netをタグ付けしているので、私はあなたが.NETのアプローチでもうまくいたと仮定しています。この回答では、.NETでExcelファイルを読み取る方法について説明します。また、SSISデータフローにフィードする際に、一括コマンドを発行してSQL Serverにデータをロードすることを妨げるものは何もありません。


人気のある回答

SSISの動的な列マッピングは非常に難解です。カラムマッピングについて心配する必要がない最も簡単な方法は、Openrowsetオプションを使用してExcelファイルからSQLファイルにデータをインポートすることです。これをコマンドとして使用してSQL実行タスクに追加することができます。

 SELECT * INTO <TableName> FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0','Excel 8.0;Database=C:\Filename.xls', 'SELECT * FROM [Sheet$]')


ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ