2

我目前正在使用 SQL Server Management Studio 2005 并且遇到了一些问题,但首先是我的 DB 模式的提取(重要的):

imghack 链接到图片

我想从test表中删除它所连接的所有内容(由它组成)。

问题是,我不能再改变数据库了(而且真的不想改变,因为使用它的程序已经太大了)。

当我尝试删除表中的条目test并为相应的外键关系打开级联 DELETE 时,DBMS 不会让我执行删除,因为它检测到某种循环(可能是由contr_tray表引起的)。

尝试通过我的程序手动删除条目时(使用 aSqlCommandBuildercmd.ExecuteNonQuery())我收到此错误:

DELETE 语句与 REFERENCE 约束冲突...

如果我使用触发器向下“级联”删除过程,也会发生同样的情况。

有人能帮我一下吗?谢谢!

PS:我还尝试创建一个连接表,其中属于该subset表的所有列都只是 NULLcontr_tray表已连接到复制表并让SqlCommandBuilder处理这个,但我的 SQL 技能似乎不符合标准(即我没有得到正确的 SQL 语法)[然后我还可以获得我需要的所有 ID 的不同值......]

任何帮助将不胜感激,并再次提前感谢。

4

2 回答 2

1

SQL Server(令人讨厌!)不支持对菱形依赖项的 ON CASCADE DELETE。在您的情况下,Block它位于“钻石”的底部,因此 SQL Server 无法自动将父级删除向它级联。

由于您没有使用识别关系,因此您需要先 SELECT 自上而下查找所有要删除的 ID,然后执行实际的 DELETE自下而上(以避免在此过程中违反 FK)。

您应该能够将此逻辑封装在一系列 INSTEAD OF DELETE 触发器中 - 您的触发器到底有什么问题?

于 2012-07-18T17:01:00.930 回答
0

您提供的错误与级联删除无关。它告诉您不能删除一行,因为它被外键引用。当您没有从 Test 到 Well 的所有级联删除(包括其间的所有关系)时,就会发生这种情况。

如果这不是您期望的答案,我们需要有关如何在每个表之间设置关系的更多信息。

于 2012-07-18T16:31:04.477 回答