在 SQL Server 2012 中执行的测试表明,DELETE FROM dbo.TableName
如果即使删除表中的一条记录也会导致外键违规,该命令会暂停并返回错误。没有记录被删除。
假设未使用的记录是可以在不违反外键关系的情况下删除的记录。
假设所有记录都可以通过不可为空的整数 ID 列唯一标识。
假设忽略可能导致副作用的功能是安全的,例如触发器或级联删除。
应该假设关于表、它的记录和关系的其他内容。(例如:解决方案在这些参数中应该是通用的。)
是否存在以以下形式删除未使用的父记录的解决方案:
- SQL 将忽略导致它的记录的错误,并成功执行没有的记录?
- 仅对一组以某种方式检测到的未使用的父记录执行删除的 SQL?(对于已知 FK 关系的特定表很容易完成。一般来说不太容易完成。)
- 服务器端代码将执行与上述解决方案等效的操作?
笔记:
- SQL 解决方案优于需要 C#、Python、Java、Ruby 等的解决方案。
- 跨 RDBMS 解决方案优于特定于 RDBMS 的解决方案。
请说明您的解决方案适用于并已经过测试的 RDBMS 。