0
例如,如果我需要将单行的PK从1更改为10,是否有任何方法可以跟踪每个可能引用旧值的proc,view和function?如何跟踪行级别依赖关系?
我的意思是,一个简单的选择,如:select * from table where FK = 1
会中断,我不得不寻找每个过程中的每个参考,并将其更改为10以使系统正常工作。
有没有这样做的自动方式?我使用SQL SERVER。
例如,如果我需要将单行的PK从1更改为10,是否有任何方法可以跟踪每个可能引用旧值的proc,view和function?如何跟踪行级别依赖关系?
我的意思是,一个简单的选择,如:select * from table where FK = 1
会中断,我不得不寻找每个过程中的每个参考,并将其更改为10以使系统正常工作。
有没有这样做的自动方式?我使用SQL SERVER。
我怀疑正确地做到这一点的唯一方法就是查询数据库元数据 - 识别所有使用PK作为FK,在proc或视图中的位置。这可能很复杂;脆弱;并容易出错。
这是避免将PK作为系统派生出来的任何其他内容的许多原因之一,无意义的价值,(甚至)创建者/管理员无法操纵。另外,在什么情况下,你会在一个proc或函数中使用硬编码 - 这也是系统脆弱性的一个潜在来源。
如果创建的PK不正确(按任何标准)或需要更改哪个PK,请创建一个新记录并将现有值复制到其中。虽然这不能回答您的查询,但您的表中删除或修改值的例程需要知道它的使用方式和位置;所以一个复制行的例程应该能够访问这些信息。