Sql 如何在merge语句中获得表之间的正确关系?
数据库A中有两个表 表1: 人民:Sql 如何在merge语句中获得表之间的正确关系?,sql,sql-server,database,merge,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 首先
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值。怎么做?我不确定我是否很好地解释了这个问题。如果有任何问题,请询问他们。假设您有两个包含源数据的临时表
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\u 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.
只需在源和目标之间使用一个“staging”表。在那里,您可以维护新旧主键之间的关系,这将帮助您进行后续更新。