私の質問はデータ移行に関するものです。私は、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つのテーブルがあります
は、雇用(のEmpIDでありますアイデンティティーフィールド)
| EmpID | Emp Name | |------ | -------- | | 1 | Emp1 | | 2 | Emp2 |
アドレス(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 |
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フィールドと外部キー関係のためにテーブルの残りの部分を移行するのに苦労しています。特に、異なる雇用主のために重複したレコードが存在する可能性があるアドレステーブルのために、最初にすべてのアドレスを挿入し、新たに挿入されたアドレスを参照してリンクを管理することは非常に困難です。
これを達成する方法はありますか?
はい。まず、ソースステージングテーブルに一意のキーが必要です。一般的なアプローチは次のとおりです。1.データをEmployerにコピーし、ソースキーをEmployerの余分なフィールドにステージングしないで保存します(削除します)。 2.データをAddressにコピーし、SourceキーをAddressの余分なフィールドにステージングしないようにします。これで、いくつか面倒な検索を実行してEmployerAddressMappingを設定できます。 Addressテーブルのステージング行を2つにするには、ソースで 'cross join'を使用します。これは完全にSQLスクリプトで行うことができますが、 –
こんにちはニックが好きな場合はSSISを使用できます。ここで問題となるのは、宛先データベースの構造的な変更は許可されていないということです。テーブルを変更せずにこれを達成するためにSSISに代替方法がありますか?同様に、1つのデータフローで3つのテーブルデータをすべて作成することは可能ですか? EmployerテーブルとAddressテーブルに挿入し、最後に生成されたIDフィールドを取得し、マッピングテーブルにデータを挿入するようなもの。一回で可能ですか? –
ビジネスキーのLOOKUP(レコードの挿入または更新を決定するもの) – KeithL