【问题标题】:Build foreign key graph query dynamically from given table从给定表动态构建外键图查询
【发布时间】:2012-06-20 05:11:39
【问题描述】:

我目前有一个删除问题。我们无权对记录启用级联删除。我有用户表,其中 userId 是大约 20 个不同表中的引用。我希望能够编写一个动态查询,它将递归查找所有引用 userId 的表并删除这些表(对于每个表,它必须找到自己的外键并删除它们),所以基本上是一个递归函数/程序将表名作为参数和主键 id 并将执行级联删除。任何脚本可以做到这一点?我可以在 information_schema 上运行查询以检索 User 表的一级依赖关系,但我需要以某种方式递归查找链接表的所有依赖关系才能擦除记录。

【问题讨论】:

  • 不完全这样做 - 它似乎删除了所有内容。以正确的顺序,但一切仍然如此。我也可以真正使用这样的脚本;我想我今晚回家后会解决这个问题,如果在那之前有人没有给出答案。我的方法是通过 PK/Table 识别记录,通过 FK 递归依赖关系,然后从最后一条记录向上删除记录。有趣的挑战...
  • 我错了。它确实有效。只需将 %1 替换为您要删除的密钥即可。然而,它确实看起来很啰嗦。但如果它有效,为什么要修复它?
  • @Peter - 我正在创建自己的,我会尝试一下,看看它是否有效。

标签: sql-server sql-server-2008 tsql sql-server-2008-r2 cascading-deletes


【解决方案1】:

正如“Nathan Skerl”所建议的那样,我使用了这个链接http://www.sqlteam.com/forums/topic.asp?TOPIC_ID=97454,它完成了这项工作。唯一的事情是我修改了 fnCascadingDelete 函数以包含 RecordID 参数,这样您就可以传递要删除的记录的 id,然后我搜索 %1 并将其替换为 @RecordID。它工作得很好,对于非常深的嵌套来说有点慢,但我想这是意料之中的。

【讨论】:

    猜你喜欢
    • 2012-11-23
    • 2023-01-10
    • 1970-01-01
    • 1970-01-01
    • 2019-04-08
    • 2012-12-21
    • 2018-12-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多