2017-07-18 10 views
0

私の質問はデータ移行に関するものです。私は、SQLのステージングテーブルにたくさんのデータを持っており、そのデータを移行先のSQL Serverに移行する作業に取り組んでいます。宛先データモデルはステージングと少し異なります。ここID列を持つ複数のリンクテーブルのSSISデータ移行

は一例である:ステージングデータベースに 次のように、ある雇用主テーブルがある: | Name | Mail Address | Mail City | Physical Address | Physical City | | ------ | ------------ | --------- | ---------------- | ------------- | | Emp1 | 123 Street | City 1 | 456 Avenue | City 1 | | Emp2 | 999 Street | City 1 | 456 Avenue | City 1 |

、次のように接続先データベースに、3つのテーブルがあります

  1. は、雇用(のEmpIDでありますアイデンティティーフィールド) | EmpID | Emp Name | |------ | -------- | | 1 | Emp1 | | 2 | Emp2 |

  2. アドレス(ADDIDがIDフィールドです) | AddID | AddressLine | Address City | | ----- | ----------- | ------------ | | 1 | 123 Street | City 1 | | 2 | 456 Avenue | City 1 | | 3 | 999 Street | City 1 | | 4 | 456 Avenue | City 1 |

  3. EmployerAddressMapping(EmpAddIDがアイデンティティであるとADDIDとのEmpIDが外部キーです) | EmpAddID | EmpID | AddID | AddFlag | | -------- | ----- | ----- | ------- | | 1 | 1 | 1 | M | | 2 | 1 | 2 | P | | 3 | 2 | 3 | M | | 4 | 2 | 4 | P |

私は、SSISを使用してデータを移行したいです。私はすでにシンプルなデータフロータスクを使用して雇用者テーブルを移行しました。しかし、今では、IDフィールドと外部キー関係のためにテーブルの残りの部分を移行するのに苦労しています。特に、異なる雇用主のために重複したレコードが存在する可能性があるアドレステーブルのために、最初にすべてのアドレスを挿入し、新たに挿入されたアドレスを参照してリンクを管理することは非常に困難です。

これを達成する方法はありますか?

+0

はい。まず、ソースステージングテーブルに一意のキーが必要です。一般的なアプローチは次のとおりです。1.データをEmployerにコピーし、ソースキーをEmployerの余分なフィールドにステージングしないで保存します(削除します)。 2.データをAddressにコピーし、SourceキーをAddressの余分なフィールドにステージングしないようにします。これで、いくつか面倒な検索を実行してEmployerAddressMappingを設定できます。 Addressテーブルのステージング行を2つにするには、ソースで 'cross join'を使用します。これは完全にSQLスクリプトで行うことができますが、 –

+0

こんにちはニックが好きな場合はSSISを使用できます。ここで問題となるのは、宛先データベースの構造的な変更は許可されていないということです。テーブルを変更せずにこれを達成するためにSSISに代替方法がありますか?同様に、1つのデータフローで3つのテーブルデータをすべて作成することは可能ですか? EmployerテーブルとAddressテーブルに挿入し、最後に生成されたIDフィールドを取得し、マッピングテーブルにデータを挿入するようなもの。一回で可能ですか? –

+0

ビジネスキーのLOOKUP(レコードの挿入または更新を決定するもの) – KeithL

答えて

0

2つの別個のDFTを使用してアドレステーブルをロードします。次の2つをそれらを読み込むためのクエリとしましょう。それぞれのアドレスを確認するには、ルックアップがあることを確認し、重複を避けるために、先にロードする前に存在していない - あなたが雇用者のアドレスが重複することができると言っているとおり

--Query 1 - Mailing Address 
select distinct 
     [Mail Address] 
     ,[Mail City] 
from dbo.Staging; 

--Query 2- Phsyical Address 
select distinct 
     ,[Physical Address] 
     ,[Physical City] 
from dbo.Staging; 

ユニークなセットでアドレステーブルを移入することがまず必要です。 EmployerAddressMappingを移入するための第三のDFTで

-

  1. 次のように従業員名とOLE DBソースの一部としてソースからアドレスを取得 -

    選択名 、[メールアドレス] 、[メール市] 、 'M' 'AddFlag' dbo.Stagingから 組合など、すべての 選択名 、[物理アドレス] 、[物理市] 、 'AddFlag'として 'P' dbo.Stagingから。 Empの名前を使用して、EMP表に

  2. 検索とEMP Idを

  3. が一致した出力を取るとEMP IDを取得し得ます。アドレスの詳細を使用してアドレスを検索し、AddressIdを取得します。
  4. 必須項目と宛先表に詳細をロードし、この他にもちろん

属性、デルタレコードを拾うのビジネスロジックが所定の位置にあることを確認してください。

私がこのアプローチで見られる1つの問題は、Emp Nameが一意になることです。そうでない場合は、Nickの言葉通り、Empのテーブルの一部としてソースの主キーが存在する必要があります。もしそうなら、それは大丈夫です。

関連する問題