如何删除所有相关行

问题描述 投票:6回答:7

我有一个表A,其中有主键列a,它是B表的原键(表B有主键b和列a)。表B也有a主键b,它是C表的原键,依此类推。

现在,如果我想从表A中删除一行,那么它将不允许我,因为其从属表B和表B取决于表C。因此,我必须先从C中删除一行,然后从B中删除一行,最后从A中删除一行] >

所以任何人都可以告诉我是否有任何直接删除的方法,而无需进入每个表并检查它是否具有任何依赖项,然后删除

我有一个表A,它的主键列为a,它是B表的原键(表B有主键b和列a)。表B也有一个主键b,它为C表的原键,依此类推。现在...

sql sql-server sql-server-2012
7个回答
2
投票

您可以使用级联Cascading Referential Integrity Constraints


3
投票

如果不允许您修改表,则可以查看EXISTS运算符。仅当EXISTS中的查询返回至少1个结果时,它才允许您从表中删除行。您可以使用它来检查依赖关系。


1
投票

您要查找的术语是“级联”-您需要级联删除。您可以启用它们,如下所述:How do I use cascade delete with SQL Server?


1
投票

您可以使用级联参照完整性,请参见此question。但是,请注意,过多的级联RI会在不意识到的情况下造成很大的损害!


1
投票

正如其他人已经指出的,cascade delete是您要寻找的。在其中一项注释中,您提到您不知道依赖性。这是一个将列出依赖项的脚本


1
投票

自动删除取决于您如何定义表之间的关系。


0
投票

有一个存储过程'sp_fkeys',它将为特定表提供所有外键


推荐问答