【发布时间】:2010-10-28 18:36:30
【问题描述】:
在我正在进行的一个项目中,我们有一些表具有许多外键关系,并且由于它处于早期开发阶段,关系的数量可能会发生变化。
我们希望能够从某些表中删除记录,但不愿意在外键关系上设置级联删除。
我们考虑了以下选项:
- 忽略我们的直觉并设置级联删除
- 使用 set null 代替级联删除
- 编写并维护自定义脚本以手动删除所有外键记录
这些选项都不是很好:-(
- 我们不想设置级联删除,因为我们不希望这成为默认行为。
- 我们不想使用级联空值,因为留下大量孤儿将毫无用处。
- 编写自定义脚本会起作用,但它的可扩展性或可维护性不是很好。为单个表甚至几个表编写脚本是可以的,但是对于每个表呢?严重地?一定会有更好的办法!至少我希望有更好的方法。
对于“太久没读”的人群;快速总结
有没有一种方法可以在逐个查询的基础上指定您想要级联删除?
可能是这样的:
-- wouldn't it be nice if this was a real command!
CASCADE DELETE FROM MyTable WHERE ID = @ID
【问题讨论】:
标签: sql-server sql-server-2008