4

SSISを使用して、特定のシナリオでExcelシートから4つのテーブルにデータを挿入しようとして、少し迷っています。

Excel シートの各行を 3 つのテーブルに分割する必要があります。ID 列の値は、関係を保持するために 4 番目のマッピング テーブルに挿入する必要があります。SSIS 2008 を使用してこれを効率的に達成するにはどうすればよいですか?

以下の例では、col4 と 5 の両方が 3 番目のテーブルに入ることが修正されていることに注意してください。

データ例はこちら

エクセル

col1  col2  col3  col4  col5
a     b     c     d     3
a     x     c     y     5

表1

PK  col
1   a
2   a

表2

PK    col1  col2
1     b     c
2     x     c

表3

PK  Col
1   d
2   3
3   y
4   5

Map_table

PK   Table1_ID  Table2_ID  Table3_ID
1    1          1          1
2    1          1          2
2    2          2          3
2    2          2          4

SSISのみを使用する義務はないので、SQLベースのアプローチが提案されたとしても問題ありません。追加の課題は、テーブル 2 で同じデータ行が存在する場合、重複する行を挿入する代わりに、マップ テーブルでその ID を使用したいということです!

4

1 に答える 1

3

マルチキャストは、探しているコンポーネントです。このコンポーネントは入力ソースを受け取り、それを多くの出力として複製します。そのシナリオでは、Excel ソースを用意してフローを複製し、データを Table1、Table2、および Table3 に挿入できます。

さて、難しいのは、これらの ID を Map_Table に戻すことです。IDENTITY を使用せず、他の手段 (GUID や、マルチキャストの前に派生列として設定する独自のインクリメンタル カウンターなど) を使用するか@@IDENTITY、最後に挿入された ID を取得するために を使用します。現在のシナリオで使用@@IDENTITYするのは面倒に思えますが、それはあなた次第です。データがそれほど大きくない場合は、GUID を使用します。

@@IDENTITYBULK 操作ではうまく機能しません。最後に作成された ID のみを取得します。また、@@IDENTITY について話しIDENT_CURRENT('TableName')ましたが、特定のテーブルの最後の ID を取得するために代わりに使用することもできます。@@IDENTITYスコープに関係なく、セッション内で作成された最後の ID を取得します。SCOPE_IDENTITY()スコープ内の最後の ID を取得するために使用できます。

于 2012-07-13T13:22:50.490 に答える