我正在使用SQL Server,我需要在现有表中添加外键。
问题是作为外键的列在另一个表中已经有一些不一致的值(不作为主键出现)。
我想知道,当我改变表并添加外键约束时,带有外键约束的表中的行会发生什么,这些值具有不一致的值?
- Neeraj
答案 0 :(得分:2)
在这种情况下,这是你的决定。您可以使用WITH NOCHECK子句将此值保留在表中。但是将检查所有新插入的值。
答案 1 :(得分:1)
您将收到错误,不会插入任何内容。
要查找所有不一致的行(假设A
和B
是目标表,A.id
是父键,B.fk_id
是子,外键,id ):
SELECT B.fk_id
FROM B
LEFT JOIN A ON A.id = B.fk_id
WHERE A.id IS NULL
执行它之后,您将拥有所有引用“无处”的子行。因此,您需要删除它们,修改为指向现有行或将B.fk_id
设置为NULL
(如果没有NOT NULL
约束)。
在该查询返回0行之后 - 您可以安全地创建外键约束而无需任何魔术选项。