我目前正在使用SQL Server Management Studio 2005,我面临着一个小问题,但首先是我的数据库模式的摘录(重要的一个):
图像的imghack链接
我想从test
表中删除它所连接的所有内容(由)。
问题是,我不能再更改数据库了(而且我真的不想更改,因为使用它的程序已经太大了)。
当我尝试删除test
表中的一个条目,并且为相应的外键关系打开级联delete时,DBMS不会让我进行删除,因为它检测到某种循环(可能是由contr_tray
表引起的)。
当试图通过我的程序手动删除条目时(使用SqlCommandBuilder
或cmd.ExecuteNonQuery())
),我会收到以下错误:
DELETE语句与REFERENCE约束冲突。。。
如果我使用触发器向下"级联"删除过程,也会发生同样的情况。
有人能帮我吗?非常感谢。
附言:我还试图创建一个联接表,其中属于subset
表的所有列都将为NULL,而contr_tray
表已联接到复制表,并让SqlCommandBuilder
处理此问题,但我的SQL技能似乎达不到标准(即我没有正确理解SQL语法)[然后我也可以为我需要的所有ID获得不同的值…]
如有任何帮助,我们将不胜感激,并再次提前表示感谢。
SQL Server(令人恼火!)不支持对菱形依赖项执行级联删除。在您的情况下,Block
位于"菱形"的底部,因此SQL Server无法自动向其级联父级删除。
由于您没有使用标识关系,因此您需要首先从上到下进行SELECT,以查找所有要删除的ID,然后从下到下执行实际的DELETE(以避免在该过程中违反FK)。
您应该能够将此逻辑封装在一系列INSTEAD of DELETE触发器中——您的触发器到底有什么问题?
您提供的错误与级联删除无关。它告诉您不能删除一行,因为它正被外键引用。当您没有从Test到Well的所有级联删除(包括它们之间的所有关系)时,就会发生这种情况。
如果这不是您所期望的答案,我们需要更多关于如何在每个表之间建立关系的信息。