删除主键行,它是另一个表的外键

时间:2012-01-24 04:56:21

标签: sql sql-server sql-server-2008 tsql

假设有一个包含主键的主表,另一个表包含该主表的外键。所以如果我们删除主表的行只是不是子表。

3 个答案:

答案 0 :(得分:6)

您应该在FKey上设置一些特定选项,例如ON DELETE {CASCADE,SET NULL,SET DEFAULT}

相反,您将无法删除引用的行,因为由于引用完整性,sql server禁止它。

因此,选项是将引用表的值设置为NULL或任何其他DEFAULT值。

也将其删除

,如果你的引用行有一些没有父行的含义 - 那么你的数据库设计有问题 - 你不需要FKey或架构不是归一化的。

答案 1 :(得分:4)

尝试这样的事情

ALTER TABLE MainTable
ADD CONSTRAINT fk_xyz  
FOREIGN KEY (xyz)  
REFERENCES ChildTable (xyz) ON DELETE CASCADE  

答案 2 :(得分:0)

我想你想要这样的事情。

ON DELETE CASCADE     指定如果尝试使用其他表中现有行中的外键引用的键删除行,则也会删除包含这些外键的所有行。

REF:http://msdn.microsoft.com/en-us/library/ms186973%28SQL.90%29.aspx