【问题标题】:How to trace row level dependency?如何跟踪行级依赖关系?
【发布时间】:2010-09-11 05:46:52
【问题描述】:
例如,如果我需要将单行的 PK 从 1 更改为 10,是否有任何方法可以跟踪可能引用旧值的每个 proc、视图和函数?
我的意思是,像 select * from table where FK = 1 这样的 proc 中的简单选择会中断,我必须在每个 proc 中查找每个引用并查看并将它们更改为 10 以使系统正常工作。
有没有自动的方法来做到这一点?我使用 SQL SERVER。
【问题讨论】:
标签:
sql
dependencies
trace
【解决方案1】:
我怀疑正确执行此操作的唯一方法是查询数据库元数据 - 以识别将您的 PK 用作 FK、在 proc 或视图中的所有位置。这可能很复杂;脆弱的;并且容易出错。
这是避免将 PK 作为系统派生的、无意义的值以外的任何东西的(许多)原因之一,(甚至)创建者/管理员也无法操作。此外,在什么情况下,您会在 proc 或函数中硬编码 PK - 这也是您系统中潜在的脆弱性来源。
如果创建的 PK 不正确(根据任何标准)或需要更改,请创建新记录并将现有值复制到其中。虽然这不能回答您的查询,但您删除或修改表中值的例程需要知道如何以及在何处使用它;因此复制行的例程应该能够访问此信息。