更改行的ID并将此更改反映到所有相关表

时间:2013-02-28 23:48:32

标签: sql-server import sql-server-2008-r2 ddl sql-import-wizard

旧版

我有一个Person表和表Company

两个表都有一列Id(标识)

表公司的Ids为1到165 在表格中,人员有1到1月的Ids

新版本

在新版本的系统中,创建了一个表Entity。 此表包含CompaniesPeople

的记录

CompanyPerson表将维护,引用Entity表。
EntityCompany

中表Person中的ID相同

问题

两个表都与其他表有多个关系。 表Entity(以及其他表)有一列ID(标识)。 问题是,当两个表一起时,Id会被重复(这是预期的)。

如何在不失去关系的情况下导入?

尝试

我想改变Company表中的Ids值,从2030年开始。 因此,在加入两个表时,Ids不会重复。

但这会产生另一个问题。

  1. 如何在不失去现有关系的情况下做到这一点?
  2. 如何更改表格中某行的ID,这会反映在与之相关的所有表格中?
  3. 我想仅使用DDL(SQL Server)

    执行此操作

2 个答案:

答案 0 :(得分:0)

如果您对自己的尝试进行了少量修改,请将新列(例如newId)添加到CompanyPerson以管理与Entity的关系并离开{{ 1}}列原样。为什么这是最简单的方法?因为新列不应该是一侧的标识列。另一方面,您可以保留与idCompany完整相关的其他表格的所有逻辑。

答案 1 :(得分:0)

  

我想改变公司表中Ids的值,从2030年开始。因此,当加入两个表时,Ids不会重复。

使用ON UPDATE CASCADE在Person表上创建对所有相关表的外键约束(或更改现有的外键约束)。然后更新Person表并更改id列的值 - 这些更改将级联到相关表。

要停止进一步的问题,可以将Person和Company中的标识列分别更改为identity(1000,3)和identity(1001,3)。

但是,我认为最好的办法是在Entity表中使用不同的EntityID列,与PersonID和CompanyID无关。 Entity表还有一个名为AltEntityID或BusinessKey的列,它包含来自另一个表的id,并且没有唯一约束或外键约束。