我目前正在使用SQL Server Management Studio 2005,我遇到了一些问题,但首先是我的数据库架构的摘录(重要的一个):
我想从test
表及其连接的所有内容中删除(由...组成)。
问题是,我不能再改变数据库了(真的不想这样,导致使用它的程序已经太大了)。
当我尝试删除test
表中的条目并为相应的外键关系启用级联DELETE时,DBMS将不允许我执行删除操作,因为它检测到某种循环(可能由contr_tray
表引起。
尝试通过我的程序手动删除条目时(使用SqlCommandBuilder
或cmd.ExecuteNonQuery())
我收到此错误:
DELETE语句与REFERENCE约束冲突...
如果我使用触发器,向下“级联”删除过程,也会发生同样的情况。
有人可以帮我吗?谢谢!
PS:我还尝试创建一个连接表,其中属于subset
表的所有列都只是NULL,其中contr_tray
表已连接到复制表并让{{1处理这个,但我的SQL技能似乎没有达到标准(即我没有得到正确的SQL语法)[然后我也可以得到我需要的所有ID的不同值...]
任何帮助将不胜感激,并再次感谢。
答案 0 :(得分:1)
SQL Server(令人讨厌!)不支持菱形依赖项上的ON CASCADE DELETE。在您的情况下,Block
位于“菱形”的底部,因此SQL Server无法自动将父删除级联到它。
由于您没有使用识别关系,因此您需要首先从上到下选择SELECT以查找要删除的所有ID,然后执行实际的DELETE 自下而上(以避免违反FK在这个过程中。)
您应该能够将此逻辑封装在一系列INSTEAD OF DELETE触发器中 - 您的触发器究竟出现了什么问题?
答案 1 :(得分:0)
您提供的错误与级联删除无关。它告诉您无法删除行,因为它被外键引用。如果您没有从Test到Well的级联删除,包括之间的所有关系,就会发生这种情况。
如果这不是您期望的答案,我们需要更多关于如何在每个表之间建立关系的信息。