Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何在merge语句中获得表之间的正确关系?_Sql_Sql Server_Database_Merge - Fatal编程技术网

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

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 首先

数据库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值。怎么做?我不确定我是否很好地解释了这个问题。如果有任何问题,请询问他们。

假设您有两个包含源数据的临时表

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”表。在那里,您可以维护新旧主键之间的关系,这将帮助您进行后续更新。