sys.sql_modules 和 sys.objects 中的 object_name 和定义关系错误

Ale*_*eix 4 sql-server sql-server-2016

我运行了以下查询

SELECT sm.object_id,
       v1.object_name,
       o.type,
       o.type_desc,
       sm.definition
FROM sys.sql_modules sm
     CROSS APPLY (VALUES (OBJECT_NAME(sm.object_id))) v1 (object_name)
     JOIN sys.objects o ON sm.object_id = o.object_id;
Run Code Online (Sandbox Code Playgroud)

object_name并且和之间存在错误关系的三个对象definition。名称和它引用的定义之间不匹配、不对应。

在此输入图像描述

看起来这个表没有跟踪这三个对象的名称和定义的删除或更改。

这种情况怎么能给出呢?我如何“更新”此表或正确修复此问题?

查询结果已更新

Pio*_*otr 6

这是使用“sp_rename”的副作用。
这些对象可以正常工作,但要刷新它们的定义,您需要重新创建它们。

来自sp_rename文档:

重命名存储过程、函数、视图或触发器不会更改 sys.sql_modules 目录视图的定义列中或使用 OBJECT_DEFINITION 内置函数获取的相应对象的名称。因此,我们建议不要使用 sp_rename 来重命名这些对象类型。相反,删除并使用新名称重新创建对象。

  • 看起来,除了名称之外,定义本身是正确且最新的,但不行的是“definition”属性中写入的对象的“名称”。感谢您的回答,我想这将成为一种新的最佳实践:不要重命名、删除和创建...虽然这听起来像是 SQL Server 团队应该修复的问题,不是吗? (2认同)