1

10 個の異なるテーブルにロードする必要がある 10 個の異なるファイルがあるとします。テーブル名はファイル名と同じにする必要があります。SSIS パッケージを使用してすべてのファイルを一度に読み込む効率的な方法を提案してください。

4

2 に答える 2

1

これは、BCP コマンド、2 つの SQL タスク、および 1 つの Foreach コンテナーを使用して、SSIS で簡単に実現できます。

各フラット ファイルのデータベースにテーブル スキーマを作成します。

データベースに新しいテーブル (Path_Table) を作成します。以下に示すように、テーブルには 3 つの列が必要です。

列 1: テーブル名 列 2: ファイルのパス 列 3: ファイル名

(Path_Table)にデータを挿入する例

Insert into Path_Table Values (‘dept_table’,’d:\\’,’department.txt’)

「n」個のテーブルで機能します。

SSDT を開いた後、新しい SSIS パッケージを作成します。[SQL タスクの実行] をドラッグします。</p>

データ型オブジェクトの名前「tbl_variable」の新しい変数を作成します。

次に、「SQLタスクの実行」を編集し、一般タブでOLE DB接続を作成し、SQLステートメントタブで以下のクエリを記述します。

// dbo.Path_table から Table_name,File_path,File_name を選択 //

SQL タスクで、結果セットのプロパティを「完全な結果セット」に変更</p>

「SQL タスクの実行」の左側のペインで、「結果セット」を選択し、クエリの結果を変数(tbl_variable) にマップします。

「コンテナごと」にドラッグアンドドロップします。左ペインで「コレクション」を選択し、ドロップダウン リストから「Enumerator」を「For Each ADO Enumerator」として選択し、ADO オブジェクト ソース変数の変数(tbl_variable)を選択します。最後に、「最初のテーブルの行」として「列挙モード」を選択します。

その 'tbl_variable' の結果には 3 つの列があります。「変数マッピング」ペインで、3 つの列の結果を 3 つの新しい変数 (データ型は varchar) にマップします。つまり、tbl_name、file_path、および file_name のインデックス番号はそれぞれ (0,1,2) で、次のパラメーター マッピングとなります。 SQL タスク(データのロード) 「コンテナごとに」内で「SQL タスク」を取ります。「SQLコマンド」でクエリを次のように記述します。

declare @tblname sysname=?
declare @dir varchar(500)=?
declare @file_name varchar(500)=?
declare @SQLstring  varchar(2000)
set @SQLstring='BCP AdventureWorks2012.'+@tblname+'  IN  '+@dir+'\'+@file_name+'.txt  -c  -t, -S PRINHYLTPDL0937 -T  -R'
exec xp_cmdshell @SQLstring
go

上記のクエリでは、要件に応じてデータベースなどを変更します。パラメーター マッピング ペインの「SQL タスク」で、以前に作成した 3 つの変数 (tbl_name、file_path、および file_name) をマップすると、パラメーター名がそれぞれ 0、1、および 2 である上記のクエリへの入力として結果が生成されます。

于 2016-11-01T11:44:40.727 に答える
0
  1. SSIS パッケージを作成します。
  2. 10 個のフラット ファイル接続を作成します (ファイルごとに)。
  3. それぞれに 10 個の Dataflow オブジェクトを作成します。

    • フラット ファイル ソース (選択した txt ファイル)
    • データ変換要素
    • 派生列要素
    • Ole DB 宛先要素 (この要素では、テーブル選択コンボックスの近くにある [新規] ボタンを押す必要があります。SSIS は、テーブル作成コードを含む SQL クエリを提供します。ファイルのすべての列があり、テーブル名も編集します)

テーブルを挿入する前に、これらのテーブルを切り捨てる SQL タスクを作成します。ほとんどの場合、SSIS は文字列型 -varchar を提供するため、おそらくいくつかのデータ型を編集する必要があります。

于 2012-08-29T20:32:57.437 に答える