0

我有一个现有的 SQL Server 数据库,其中的客户表包含以下列:

Customers:  CustomerId (PK), A, B, C, D, E, F 

最后三列代表邮政地址;我想将这些地址列提取到一个单独的地址表中,由 FK 链接,并同时迁移数据。所以我最终得到:

Customers:  CustomerId (PK), A, B, C, AddressId (FK)

Addresses:  AddressId (PK), D, E, F

Address 最终也会被许多其他表引用,因此它需要自己独立的 AddressId,由数据库生成 - 它不能与 Customer 共享相同的 Id。地址也不能包含对客户的 FK - 架构必须如图所示。

我对 SQL 不是很流利。在 SQL 中创建新的 Addresses 表,复制数据,然后从客户中删除冗余列没有任何困难。但我不知道如何将数据库生成的 AddressId 作为 FK 返回到 Customer。我是否需要使用某种程序方法,例如使用游标 - 或者有什么方法可以在一个声明性 SQL 查询中完成整个迁移?谢谢。

(注意,我希望最终能够在 Code First 迁移中做到这一点。)

4

1 回答 1

0

我终于找到了答案。您必须使用合并,以便能够将源表和目标表中的列输出到临时表中:

Declare @MyTableVar table(
 CustomerId int not null,
 AddressId int not null
);

Merge into dbo.Addresses    
using (select CustomerId, D,E,F from dbo.Customers) as addressDetails
on 1=0
when not matched then 
insert ( D,E,F) values ( Customers.D, Customers.E, Customers.F)
output addressDetails.CustomerId, inserted.AddressId into @MyTableVar;
update Customers  set AddressId =
 (Select AddressId from @MyTableVar where CustomerId = Customers.CustomerId );
于 2013-10-30T15:10:27.123 回答