2011-01-13 9 views
1

1つのDBスキーマから別のDBスキーマへの大規模なデータ移行を開発しました。数ヶ月前に、新しいアプリケーションにクライアントを置くようになりました。つまり、新しいスキーマ(宛先DB)にデータが格納されていることを意味します。SSISデータ移行プライマリキーIDの競合

これで、プライマリキーがソースからデスティネーションDBに重複する可能性があり、解決策を見つけるのに苦労しています。私が考えることができる唯一の解決策は、IDが宛先に存在するかどうかをチェックし、送信元のIDを宛先の最大IDよりも1つ多く更新してからレコードを移行することです。これは、何百ものテーブルで行う必要があるのは本当に面倒です。何か案は?

+0

ビューを結合する2つのテーブルセットを持つことは可能ですか?レコードを挿入するときには、通常、PKの編集を開始するのは良い考えではありません。長い間、カスケードデータ整合性の問題があります。 – JNK

答えて

2

私はSSISについて何も知らないが、SQLを使用して問題を解決するには以下の方法があります。

宛先テーブルに挿入するときは、IDを挿入しないでください。行が挿入されると、新しく挿入されたアイデンティティと古いアイデンティティをマッピングテーブルに取り込みます(「MERGE + OUTPUT INTO」を参照)。マッピングテーブルを使用して、挿入されていないテーブルを更新し、古いアイデンティティを新しいアイデンティティで置き換えます。

もちろん、これが機能するためには、外部キーや制約違反を起こさない順序でテーブルに挿入する必要があります。

すべてのことをやっていないし、短時間ユーザーをテーブルからロックすることができれば、DBCC CHECK INDENTを使用してIDを予約することができます。これらの新しいIDを使用して古いデータを更新し、SET IDENTITY_INSERT ONを挿入することができます。