假设我有一个Customers
表,其中包含ID
列和CompanyId
列。
我需要从数据库中删除一些公司。
问题是,该表有很多子表,那些表也有很多子表等等......
只是澄清一下,所有的关系都有约束。
我该如何实现?
感谢。
编辑:请注意,我正在尝试做的是一次性操作。
我是否会更改约束或添加触发器或类似的东西,我计划最终删除它。
答案 0 :(得分:2)
此问题的内置解决方案是使用ON DELETE CASCADE
设置您的FK约束。
然而,许多人(包括我自己)对此做了一些不安,因为错误的删除将无声地传播通过数据库。
答案 1 :(得分:2)
以下是三种方式:
我个人不会让它变得动态,并且会有一个特定的“DeleteCompany”过程。您可能需要一条规则,例如“如果销售额> 1亿美元则不删除”需要检查的规则
如果你有多个级联路径,这可能会很棘手,但是很简单
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?