SQL表关系

时间:2019-02-06 11:58:23

标签: sql sql-server database relation

许多年前,我们在MS SQL中创建了许多没有表关系的表。现在,我们正在尝试在这些表之间创建关系。问题在于许多这些开发人员在表中使用了伪造的ID。

例如: 表A,ID(主键)->表B,AID必须是相关的。但是开发人员使用了一些伪造的ID(例如-1,-2)来解决自己的问题。现在,当我尝试在表A,ID(主键)->表B,AID之间创建关系时,出现了错误。

表A

ID | NAME
1  | name01
2  | name02

表B

ID | NAME   | AID
1  | name01 | 1
2  | name02 | -1
3  | name03 | -2

有没有办法解决此问题,这意味着开发人员已完成全部工作,他们没有使用sql中的任何关系,而是在代码隐藏中控制所有内容。

谢谢

3 个答案:

答案 0 :(得分:4)

您需要将它们添加到参考表中。像这样:

insert into a (id, name)
     select distinct aid, 'Automatically Generated'
     from b
     where not exists (select 1 from a where b.aid = a.id) and
           a.id is not null;

然后您可以添加外键关系:

alter table b add constraint fk_b_aid foreign key (aid) references a(id);

答案 1 :(得分:0)

referential integrity的总体思路是,您不能具有无效的引用。

因此,最好的操作方法是将其吸起并手动清理。在另一个表中创建丢失的条目,或删除记录。

答案 2 :(得分:0)

您还可以忽略对现有数据的检查。如果您使用sql server management studio创建关系,则可以像在此屏幕快照中那样进行选择

enter image description here

希望有帮助