许多年前,我们在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中的任何关系,而是在代码隐藏中控制所有内容。
谢谢
答案 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)