我处理以下情况:我有一个客户表,其中客户的地址被保存为每行的列。
现在,在重新设计之后,现在有一个表Addresses
用于地址,而客户表引用该地址。
在迁移到此新结构时,我首先将客户迁移到新表,离开AddressId
列NULL
。
然后我开始迁移地址。首先,我想到的代码是:
INSERT INTO Addresses (
Address,
City,
State
) SELECT
Address,
City,
State
FROM OldDatabase.dbo.Customers
现在,问题是对于在那里执行的每个插入,对于从旧客户表到新客户表的每个地址,必须将地址ID添加到客户表中的相应客户行。
我该怎么做?如何通过将相应客户的AddressId
设置为刚添加的地址ID,为每个插入添加引用?
编辑:新的客户表有很多字段,出于问题的目的,我们可以认为它有以下字段:
地址表包含字段
旧的客户表就是这一切:
我需要将这个旧结构迁移到新结构。所以我需要将这个旧表的每个客户条目映射到一个新的客户条目加上一个地址条目。
我首先尝试迁移所有客户,留下AddressId
null,以便稍后迁移地址但是它没有按预期工作,因为如果我迁移地址就像我尝试一样,我不知道如何添加关系。
答案 0 :(得分:1)
您需要跟踪从插入中获取的AddressID并使用它更新Customers表。下面是一个快速和松散(即没有错误处理),但提出了基本的想法。
declare @Addresses table (AddressID int)
begin tran
INSERT INTO Addresses (
Address,
City,
State
)
output Inserted.AddressID into @Addresses
SELECT
Address,
City,
State
FROM OldDatabase.dbo.Customers
where CustomerID = @CustomerID;
update OldDatabase.dbo.Customers
set AddressID = (select top(1) AddressID from @Addresses)
commit tran
如果您在客户圈中执行此操作,请确保清除客户之间的@Addresses表(否则每个客户记录将获得相同的AddressID!)