如何在merge语句中获取表之间的正确关系?

时间:2017-04-02 16:55:54

标签: sql sql-server database merge

数据库A中有两个表。

表1:

人:

person_id,
row1,
row2

教育:

education_id PK,
person_id FK,
row3,
row4

我想将这些表合并到数据库B.我使用临时表来保存记录,但是pk密钥存在问题。在数据库b的表中,主键是自动递增的。如何记住数据库b中表之间的连接,以便创建相同的连接但具有新的主键号。 例如: 教育

education_id person_id
1            3
2            5
3            8

首先,我将合并用于人。优秀的所有数据都合并到数据库B,具有新的PK值。现在我想要合并教育表,但是与数据库B具有相同的关系(如在数据库A中),但具有新的pk值。怎么做?我不确定我是否很好地解释了这个问题。如果有任何问题,请询问他们。

1 个答案:

答案 0 :(得分:1)

假设您有2个临时表INCLUDE源数据

DECLARE @Person AS TABLE (personid int)

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

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

您可以执行以下步骤将数据插入数据库B. SET IDENTITY_INSERT dbo.Person ON是更新的关键

 -- 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.
相关问题