2017-04-02 1 views
0

データベースAの二つのテーブルどのようにマージステートメントでテーブル間の適切な関係を取得するには?

表1があります。

人:私はデータベースBにこのテーブルをマージしたい

education_id PK, 
person_id FK, 
row3, 
row4 

person_id, 
row1, 
row2 

教育一時テーブルを使用してレコードを保存しますが、pkキーに問題があります。データベースbの表では、主キーは自動インクリメントです。データベースbのテーブル間の結合を覚えて、同じ結合を新しい主キー番号で作成する方法。たとえば : 教育

education_id person_id 
1   3 
2   5 
3   8 

まず私は人々のためにマージを使用しました。優れたすべてのデータは、新しいPK値でデータベースBにマージされました。今私はマージ教育テーブルが、データベースBと同じリレーションシップ(データベースAと同じですが、新しいpk値で)が必要です。どうやってするの?私は問題をうまく説明したかどうかはわかりません。質問がある場合は、質問してください。

+0

を更新するための鍵でありますソースとターゲットの間に「ステージング」テーブルがあります。ここで古いキーと新しいプライマリキーの関係を維持することができます。これにより、後で更新するのに役立ちます。 –

答えて

1

あなたは2つの一時テーブルを使用すると、データベース・B. SET IDENTITY_INSERT dbo.Person ONにデータを挿入するためにこれらのステップを行うことができ、ソースデータ

DECLARE @Person AS TABLE (personid int) 

DECLARE @Education AS TABLE (educationid int, personid int) 

DECLARE @MaxPersonId int ---- max Person ID in database B 

を含まれていることAssummingするだけで、「使用

-- 1. UPDATE temp table WITH new PersonId 
UPDATE personid in temp Table 
UPDATE @Person 
SET 
    personid = personid + @MaxPersonId 

UPDATE @Education 
SET 
    personid = personid + @MaxPersonId 

-- 2. INSERT person in to database B 
-- SET IDENTITY_INSERT dbo.Person ON would do the trick. 
-- You could insert a primary auto-increment field by a fixed value 
SET IDENTITY_INSERT dbo.Person ON 
    -- Insert person from temp table @Person 
    INSERT INTO dbo.Person (PersonId) 
    SELECT p.personid FROM @Person p 

SET IDENTITY_INSERT dbo.Person OFF 

-- 3. INSERT INTO dbo.Education from @Education. 
関連する問題