从复杂的数据库中删除数据

时间:2011-05-25 08:23:47

标签: sql sql-server-2005

假设我有一个Customers表,其中包含ID列和CompanyId列。

我需要从数据库中删除一些公司。

问题是,该表有很多子表,那些表也有很多子表等等......

只是澄清一下,所有的关系都有约束。

我该如何实现?

感谢。

编辑:请注意,我正在尝试做的是一次性操作。

我是否会更改约束或添加触发器或类似的东西,我计划最终删除它。

3 个答案:

答案 0 :(得分:2)

此问题的内置解决方案是使用ON DELETE CASCADE设置您的FK约束。

然而,许多人(包括我自己)对此做了一些不安,因为错误的删除将无声地传播通过数据库。

答案 1 :(得分:2)

以下是三种方式:

  • 使用存储过程首先删除子项,然后删除转换中的父行。

我个人不会让它变得动态,并且会有一个特定的“DeleteCompany”过程。您可能需要一条规则,例如“如果销售额> 1亿美元则不删除”需要检查的规则

  • 外键上的CASCADE DELETE

如果你有多个级联路径,这可能会很棘手,但是很简单

  • INSTEAD OF触发器

INSTEAD OF触发器就像存储过程一样。注意:在AFTER触发器触发之前,您将获得FK违规

就个人而言,我会使用存储过程,所以我有明确的删除。效果与级联FK相同,但更明显。

答案 2 :(得分:0)

对于SQL Server 2008,这是解决方案:

Generate Delete Statement From Foreign Key Relationships in SQL 2008?

使用此解决方案,您可以轻松找到正确的DELETE序列,同时尊重外键的关系。

如果您对此主题感兴趣,还可以阅读ORACLE PL / SQL解决方案:

How to generate DELETE statements in PL/SQL, based on the tables FK relations?