Sql 将数据从一个数据库复制到另一个数据库-包括引用的表和标识

Sql 将数据从一个数据库复制到另一个数据库-包括引用的表和标识,sql,sql-server,database,Sql,Sql Server,Database,我有一个包含这两个表的数据库: [旧数据库][每][人] PersonId | FirstName | LastName | Code 2003 | 'Mike' | 'Jordan' | 2 2357 | 'Sara' | 'Jacobs' | 1 3481 | 'John' | 'Gates' | 5 PersonId | FirstName | LastName | Code [OldDb].[Sal].[Customer] Customer

我有一个包含这两个表的数据库:

[旧数据库][每][人]

PersonId | FirstName | LastName | Code
2003     | 'Mike'    | 'Jordan' | 2
2357     | 'Sara'    | 'Jacobs' | 1
3481     | 'John'    | 'Gates'  | 5
PersonId | FirstName | LastName | Code
[OldDb].[Sal].[Customer]

CustomerId | PersonId | CustomerType
830        | 2003     | 3
945        | 2357     | 2
1333       | 3481     | 2
CustomerId | PersonId | CustomerType
我的新数据库具有相同的表和架构:

[NewDb].[Per].[Person]

PersonId | FirstName | LastName | Code
2003     | 'Mike'    | 'Jordan' | 2
2357     | 'Sara'    | 'Jacobs' | 1
3481     | 'John'    | 'Gates'  | 5
PersonId | FirstName | LastName | Code
[NewDb].[Sal].[Customer]

CustomerId | PersonId | CustomerType
830        | 2003     | 3
945        | 2357     | 2
1333       | 3481     | 2
CustomerId | PersonId | CustomerType
表Person中的PersonId是identity,我可以使用此代码复制人员,但PersonId与旧数据库不同,因此我不能使用下面提到的第二个查询从customer表复制数据

INSERT INTO NewDb.per.Person
(FirstName,LastName,Code)
SELECT FirstName,LastName,Code
FROM OldDb.per.Person


INSERT INTO NewDb.Sal.Customer
(PersonId,CustomerType)
SELECT PersonId,CustomerType
FROM OldDb.Sal.Customer
现在我需要一个查询,以便将两个表的数据复制到新的数据库中

任何帮助都是很大的帮助


谢谢。

您的新数据库是空的,如果您想保留旧的
PersonId
,您可以使用
设置身份\u在

SET IDENTITY_INSERT NewDb.per.Person ON  -- then you could use personId in Insert
INSERT INTO NewDb.per.Person
(PersonId, FirstName,LastName,Code)
SELECT PersonId, FirstName,LastName,Code
FROM OldDb.per.Person

SET IDENTITY_INSERT NewDb.per.Person OFF  -- remember set it off after insert

-- then insert new Customer without conflict
INSERT INTO NewDb.Sal.Customer
(PersonId,CustomerType)
SELECT PersonId,CustomerType
FROM OldDb.Sal.Custome
参考链接:

如果您想要新的
PersonId
自动递增,您可以这样做:

 ----CREATE `OldPersonId` column  in your NewDb.per.Person

INSERT INTO NewDb.per.Person
(OldPersonId, FirstName,LastName,Code)
SELECT PersonId, FirstName,LastName,Code
FROM OldDb.per.Person

-- You could insert you new customer Inner join by `OldPersonId` Column
INSERT INTO NewDb.Sal.Customer
(PersonId,CustomerType)
SELECT np.PersonId,CustomerType
FROM OldDb.Sal.Customer oc
INNER JOIN NewDb.per.Person np ON oc.PersonId = np.OldPersonId

-----DELETE `OldPersonId` column in NewDb.per.Person

您的新数据库是空的,如果您想保留旧的
PersonId
,您可以使用
设置标识\u插入新的db.per.Person ON

SET IDENTITY_INSERT NewDb.per.Person ON  -- then you could use personId in Insert
INSERT INTO NewDb.per.Person
(PersonId, FirstName,LastName,Code)
SELECT PersonId, FirstName,LastName,Code
FROM OldDb.per.Person

SET IDENTITY_INSERT NewDb.per.Person OFF  -- remember set it off after insert

-- then insert new Customer without conflict
INSERT INTO NewDb.Sal.Customer
(PersonId,CustomerType)
SELECT PersonId,CustomerType
FROM OldDb.Sal.Custome
参考链接:

如果您想要新的
PersonId
自动递增,您可以这样做:

 ----CREATE `OldPersonId` column  in your NewDb.per.Person

INSERT INTO NewDb.per.Person
(OldPersonId, FirstName,LastName,Code)
SELECT PersonId, FirstName,LastName,Code
FROM OldDb.per.Person

-- You could insert you new customer Inner join by `OldPersonId` Column
INSERT INTO NewDb.Sal.Customer
(PersonId,CustomerType)
SELECT np.PersonId,CustomerType
FROM OldDb.Sal.Customer oc
INNER JOIN NewDb.per.Person np ON oc.PersonId = np.OldPersonId

-----DELETE `OldPersonId` column in NewDb.per.Person

您的旧数据是否存在于新数据库中?您只想插入,还是同时插入和更新?NewDb为空,我想从OldDb复制所有数据。使用old
person id
?我不关心old personId,我只希望我在NewDb中添加的personId与将插入NewDb的personId相同,表:Customer。因为当PersonId在person表中更改时。旧personId不可接受。您的旧数据是否存在于新数据库中?您只想插入,还是同时插入和更新?NewDb为空,我想从OldDb复制所有数据。使用old
person id
?我不关心old personId,我只希望我在NewDb中添加的personId与将插入NewDb的personId相同,表:Customer。因为当PersonId在person表中更改时。老的人形是不能接受的。谢谢你,这一个为我工作。我试图处理数据库中的其他冲突。大数据库,大问题xD。谢谢你,这一个对我有用。我试图处理数据库中的其他冲突。大数据库,大问题。