我有一个包含数据的表,我需要将其迁移到另一个带有链接表的表中。这是一次性迁移,作为升级的一部分。
我有一张公司表,其中包含与公司和联系人有关的记录。 我想将联系人详细信息迁移到另一个表中,并将新人与链接表链接
考虑我已经填充了这个表
tblCompany
我想将联系人数据迁移到
tblPerson
并使用标识列生成并将其插入链接表
tblCompanyPerson
我尝试了几种不同的方法来使用游标和输出变量到临时表中来解决这个问题,但对我来说似乎没有(或者给我解决方案......)
我最接近的是在tblPerson上有一个companyID并将companyId插入其中并将新的personId和companyId输出到临时表中。然后遍历临时表以创建tblCompanyContact。
例如
declare @companycontact TABLE (companyId int, PersonId int)
insert into tblPerson
(Forename,
Surname,
CompanyID)
output inserted.CompanyID, INSERTED.PersonID into @companycontact
select
ContactPersonForeName,
ContactPersonSurename,
CompanyID
from tblCompany c
insert into tblCompanyPerson
(CompanyID,
PersonID)
select c.companyId, PersonId from @companycontact c
背景
答案 0 :(得分:1)
有一个'技巧'使用MERGE
语句来实现新插入值和源值之间的映射:
MERGE tblPerson trgt
USING tblCompany src ON 1=0
WHEN NOT MATCHED
THEN INSERT
(Forename, Surename)
VALUES (src.ContactPersonForeName, src.ContactPersonSurename)
OUTPUT src.CompanyID, INSERTED.PersonID
INTO tblCompanyPerson (CompanyId, PersonID);
1 = 0条件是始终从源头获取所有内容。您可能希望用一些子查询替换它甚至整个源,以实际检查您已经拥有相同人物的任何内容。
答案 1 :(得分:0)
因为我不知道你使用什么SQL很难决定这是否正确。我也不知道你是否已经尝试过这个,但这是我最好的想法:
insert into tblPerson
(Forename, Surename)
Select ContactForename, ContactPersonSurename
from tblCompany
insert into tblCompanyPerson
(CompanyID, PersonID)
select CompanyId, PersonID
from tblPerson, tblCompany
where ContactForename = Forename and ContactPersonSurename = Surename
Sarajog