在SQL Server中添加外键约束的问题?

时间:2011-04-21 06:24:55

标签: sql sql-server database sql-server-2005

我正在使用SQL Server,我需要在现有表中添加外键。

问题是作为外键的列在另一个表中已经有一些不一致的值(不作为主键出现)。

我想知道,当我改变表并添加外键约束时,带有外键约束的表中的行会发生什么,这些值具有不一致的值?

- Neeraj

2 个答案:

答案 0 :(得分:2)

在这种情况下,这是你的决定。您可以使用WITH NOCHECK子句将此值保留在表中。但是将检查所有新插入的值。

答案 1 :(得分:1)

您将收到错误,不会插入任何内容。

要查找所有不一致的行(假设AB是目标表,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行之后 - 您可以安全地创建外键约束而无需任何魔术选项。