我一定是误解了微软的文档,因为它说
重命名表不会自动重命名对该表的引用。您必须手动修改引用重命名表的任何对象。
但是,当我在表上运行时sp_rename,除了重命名表之外,它还更改了连接到表的外键。我不是在抱怨,因为它们需要改变,我只是很困惑为什么它说的是一件事,然后又做了另一件事。外键为什么不是对象?sp_rename 文档似乎说它是一个对象......
sys.objects 中跟踪的类型的项目。例如,OBJECT 可用于重命名对象,包括约束(CHECK、FOREIGN KEY、PRIMARY/UNIQUE KEY)、用户表和规则。
重命名存储过程、函数、视图或触发器不会更改 sys.sql_modules 目录视图的定义列中相应对象名称的名称
还有下一段:
重命名对象(例如表或列)不会自动重命名对该对象的引用。您必须手动修改引用重命名对象的任何对象。例如,如果您重命名表列并且触发器中引用了该列,则必须修改触发器以反映新的列名称
[sys].[sql_modules]视图文档说:
P、RF、V、TR、FN、IF、TF 和 R 类型的对象具有关联的 SQL 模块。独立默认值,D 类型的对象,在此视图中也有 SQL 模块定义
查看sys.objects.[type]的定义,我们看到
请注意其中每一个都是预先编写脚本的SQL 语句。
我们还知道,可以sp_rename重命名关联索引及其 PRIMARY 约束,还可以重命名主 XML 索引和辅助 XML 索引。
基本上,数据库必须强制执行完整性,并且能够重命名列而不重命名依赖列将彻底破坏数据库。
sp_rename因此,按照您所注意到的那样做是完全有道理的。