Sql 创建一个过程,当子表中的任何记录';它不在父表中
当我从我们的应用程序中删除一条记录时,它会在某些表中保留一些记录。我正在寻找一些帮助,以了解如何创建一个过程,从已从父表中清除的子表中删除记录 一般来说,你的问题的答案称为存在量化。在SQL中,其形式为:Sql 创建一个过程,当子表中的任何记录';它不在父表中,sql,sql-server,Sql,Sql Server,当我从我们的应用程序中删除一条记录时,它会在某些表中保留一些记录。我正在寻找一些帮助,以了解如何创建一个过程,从已从父表中清除的子表中删除记录 一般来说,你的问题的答案称为存在量化。在SQL中,其形式为: delete from C where not exists ( select 1 from P where P.child_key = C.key ) 然而,你不应该处于这样的境地:孩子永远不应该没有父母。子表应该声明一个外键,该外键需要父表的存在。这样,将插入子对象的父
delete from C where not exists (
select 1 from P
where P.child_key = C.key
)
然而,你不应该处于这样的境地:孩子永远不应该没有父母。子表应该声明一个外键,该外键需要父表的存在。这样,将插入子对象的父对象,并且当引用该父对象的子对象存在时,不能删除该父对象
在存在此类外键约束的情况下,唯一允许的事件顺序是先删除父项中存在的子项,然后删除父项。为了正确起见,这两条语句应该是事务的一部分
一些评论建议使用声明性引用完整性(DRI)来删除子行。我不是球迷;我使用DRI作为约束的一种形式来创建规则。对于数据操作,我建议使用显式代码,这样在应用程序级别可以更轻松地处理意外事件 它发生在组织不良的数据库中,因此您需要清理数据
delete childTable where FK_field not in (
select PK_field from parentTable)
为避免将来出现此问题,请在子表中创建FK约束。此处需要更多信息。。。你的桌子结构是什么样的?你能提供一些样本数据吗?您已经尝试过哪些查询?我们无法神奇地给你一个答案,而不知道你想做什么。听说过外键约束
和级联删除
吗?你在找级联吗?