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