我是 SQL 新手,今天我接到了一项重要任务 - 为表中的数据创建迁移脚本。据我了解,迁移脚本正在从表 A 复制数据并将其移动到其他表 B 和 C 等。当数据库设计不断变化并且团队想要保留数据时,这似乎很常见。
我的任务:
我有一个带有 CityId 字段的 JobOffer
表。现在团队想要删除该字段,并为了保留信息,他们将把 CityId 添加到 Address
表中,并使用名为 Location
的中间表连接两个表(这允许JobOffer 有多个地址)。
我不知道如何执行此任务。我假装的 c# 类比是这样的:
foreach (var row in JobOffer)
{
int addressId;
if (!Address.Contains(row.CityId)){
addressId = Address.add(row.CityId);
Locaion.add(row.JobOfferId, addressId);
}
else
{
Locaion.add(row.JobOfferId, Address.get(row.CityId));
}
}
我如何在 SQL 中执行此操作?
最佳答案
您需要三张表 - 一张用于候选人,一张用于地址(位置),一张将两者联系起来。第三个表是必要的,因为你描述的是多对多关系。一个候选人可能有多个地点,一个地点可能容纳多个候选人。
当我创建类似于您的创建时,它对输入数据进行了两次扫描: 第一个检查我是否拥有所有位置。如果有任何遗漏,我将其插入到位置表中。
第二次扫描将数据插入到 candidate 和 canditatelocs 表中。在这一点上,我确定我在位置表中有每个候选人的地址。
下面是表格的描述:
创建候选表(candidateid int identity primary key, idate datetime default getdate(), name varchar(200))
创建表 candidatelocs (candidateid int, locid int)
创建表位置(locid int identity primary key, city varchar(500), state varchar(500))
关于c# - 在 SQL 中实现 C# 迁移代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28746205/