当前位置: 首页 > 面试题库 >

MS SQL中的自引用约束

茹轩昂
2023-03-14
问题内容

MS SQL是否使用ON DELETE CASCADE选项限制自引用约束?我有一个具有父子关系的表,PARENT_ID列是ID的外键。使用ON DELETE
CASCADE选项创建它会导致错误

“引入FOREIGN KEY约束可能会导致循环或多个级联路径。请指定ON DELETE NO ACTION或ON UPDATE NO
ACTION,或修改其他FOREIGN KEY约束。”

我不敢相信我必须以递归方式删除此层次结构。除了触发器,还有其他问题吗?


问题答案:

在这种情况下,您无法在具有自引用约束的表上设置ON DELETE CASCADE。可能存在循环逻辑问题,因此不允许这样做。

有一个很好的文章在这里-尽管它是8,而不是SQL版本9 -尽管适用同样的规则。



 类似资料:
  • 我创建了一个表(团队),它有一个由id、项目id和用户id组成的复合主键。每个主键引用除id之外的其他表中的一个键。现在我想添加一个键(团队id),该键引用团队自己的id,因为我想满足子团队的需求,该团队id将包含父团队的id。 我遇到了一个错误:“没有唯一的约束匹配引用表“team”的给定键。”。 复合主键中每个键的每个可能组合都是团队的唯一约束,我理解错了吗?我错过了什么?

  • 问题内容: 在MS2000中工作,我有一个名为JobOwners的表,该表将Jobs(JPSID)映射到拥有它们的雇员(EmpID)。它还包含他们开始拥有该工作的日期(DateStarted),他们停止拥有该工作的日期(DateEnded)以及所有权是否处于活动状态(IsActive)。看起来像这样。 尽管没有活动的重复应该没问题,但不应有活动的JPSID重复。通过一些研究,我发现可以使用CHEC

  • 本文向大家介绍MSSQL自动重建出现碎片的索引的方法分享,包括了MSSQL自动重建出现碎片的索引的方法分享的使用技巧和注意事项,需要的朋友参考一下 1.索引碎片的产生? 由于在表里大量的插入、修改、删除操作而使索引页分裂。如果索引有了高的碎片,有两种情况,一种情况是扫描索引需要花费很多的时间,另一种情况是在查询的时候索引根本不使用索引,都会导致性能降低。 2.碎片类型分为: 2.1 内部破碎 由于

  • 我不断得到 所以我用 以下死锁信息打印在日志中: 这些行表示已检测到死锁,进程1已被选为受害者。 进程id_1的日志 进程id_2的日志 下面一行给出了process_id_1的细节, 参考文献[1]是我们想要执行的查询。。。注意:这是对表名和表名的select查询。container\u id是来自表名vfditem的外键。 Ref[4]说它正在等待资源并被暂停 下面一行给出了process_i

  • 我在反序列化遵循以下格式的Json数组时遇到了一些问题: 它基本上是一个类别数组,其中每个类别也可以有一个子类别列表,依此类推。我的类模型看起来有点像这样: 现在,Gson显然抱怨循环引用。有没有办法解析这个Json输入,因为我不能假设有多少个类别级别?提前感谢。 编辑:以防万一有人有类似的问题,根据Spaeth的回答,我将解决方案调整为使用反射的更一般的情况。唯一的要求是JSON数组表示的对象列

  • 我试图删除一张表,但收到以下消息: msg 3726,级别16,状态1,第3行 无法删除对象“dbo. UserProfile”,因为它被FOREIGN KEY约束引用。 msg 2714,级别16,状态6,第2行 数据库中已经有一个名为“UserProfile”的对象。 我用SQL服务器管理工作室环顾四周,但我找不到约束。我如何找出外键约束?