c# - SQL DELETE(级联 DELETE 与 TRIGGERS 与 "Manual"-DELETE)

标签 c# sql sql-server-2005 cascading-deletes

我目前正在使用 SQL Server Management Studio 2005,我遇到了一些问题,但首先是我的 DB 架构的摘录(重要的):

imghack link to the image

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

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

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

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

The DELETE statement conflicted with the REFERENCE constraint ...

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

有人可以帮我吗?谢谢!

P.S.:我还尝试创建一个连接表,其中属于 subset 表的所有列都将简单地为 NULL,其中 contr_tray 表已连接到复制表并让 SqlCommandBuilder 处理这个,但我的 SQL 技能似乎达不到标准(即我没有正确使用 SQL 语法)[然后我还可以获得所有 ID 的不同值我需要...]

如有任何帮助,我们将不胜感激,并在此先致谢。

最佳答案

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

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

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

关于c# - SQL DELETE(级联 DELETE 与 TRIGGERS 与 "Manual"-DELETE),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11545722/

相关文章:

c# - 计算两个日期之间的差异返回负数

c# - 如何将 XML 读入与其 xsd 匹配的类中

c# - 存储经过良好散列处理的密码及其散列方法是否很危险?

mysql - SQL 如何统计单个评论在多个级别上的所有回复

sql - SQL Server 2005发送邮件

c# - 数据库连接池如何影响性能?

sql-server - sp_replmonitorsubscriptionpendingcmds 到表中 [How2]

C#:在接口(interface)中实现抽象属性以实现子级

sql - PostgreSQL upper function on the ascii 152 character ("ÿ")

sql - Postgresql:从 EXECUTE 输出导出到 csv 数据