【问题标题】:Implement C# migration code in SQL在 SQL 中实现 C# 迁移代码
【发布时间】:2015-02-26 15:20:43
【问题描述】:

我是 SQL 新手,今天我被分配了一项重要任务 - 为表中的数据创建迁移脚本。据我了解,迁移脚本是从表 A 复制数据并将其移动到其他表 B 和 C 等等。当数据库设计不断变化并且团队想要保留数据时,这种情况似乎很常见。

我的任务: 我有一个 JobOffer 表,其中包含 CityId 字段。现在团队想要删除该字段,为了保留信息,他们会将 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 中做到这一点?

【问题讨论】:

  • 你的桌子现在是什么样子的?
  • 它们看起来像图片
  • 对不起,我的意思是在创建位置表之前。
  • 位置和地址表是否完全为空?
  • 位置表是空的,地址表不是:S 它有必须保留的旧数据。

标签: c# mysql sql-server


【解决方案1】:

您需要三张表 - 一张用于候选人,一张用于地址(位置),一张将两者联系起来。第三个表是必要的,因为您描述的是多对多关系。一个候选人可能有多个位置,一个位置可能容纳多个候选人。

当我创建与您的类似时,它对输入数据进行了两次扫描: 第一个检查我是否拥有所有位置。如果有任何遗漏,我将其插入位置表。

第二次扫描将数据插入到候选和candidatelocs 表中。在这一点上,我确定我在位置表中为每个候选人都有一个地址。

这里是对表格的描述:

创建候选表(candidateid int 标识主键,idate datetime default getdate(),name varchar(200))

创建表candidatelocs(candidateid int,locid int)

创建表位置(locid int identity 主键、city varchar(500)、state varchar(500))

【讨论】:

    猜你喜欢
    • 2020-12-16
    • 1970-01-01
    • 2014-12-01
    • 2013-03-17
    • 1970-01-01
    • 2013-08-06
    • 2015-07-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多