【发布时间】:2016-11-09 10:02:24
【问题描述】:
在 Microsoft SQL Server 2014 (SP2-CU1) (KB3178925) 上 - 12.0.5511.0 (X64) 2016 年 8 月 19 日 14:32:30 版权所有 (c) 微软公司 Windows NT 6.1(Build 7601:Service Pack 1)(Hypervisor)上的企业版(64 位)
由于 sp_UpdateStats 实际上不存在,查询:
SELECT OBJECT_ID('sp_UpdateStats')
返回值:-838816646
和
select * FROM sys.objects WHERE name='sp_UpdateStats'
返回 0 行...
怎么可能? OBJECT_ID 函数中的错误?
编辑
很高兴知道 ID -838816646 来自 sys.sysobjects 或 sys.system_objects 但更准确的问题是:
- 为什么该过程出现在 sys.sysobjects 和 sys.system_objects 中,而不是出现在应该是我们应该使用的新视图的 sys.objects 中?
【问题讨论】:
-
来自fine manual:“此视图有一个具有相同架构的版本,称为
sys.system_objects,它显示系统对象。还有另一个视图称为sys.all_objects,它同时显示系统和用户对象。所有三个目录视图都具有相同的结构。”sp_updatestats是一个系统对象。 -
您似乎认为您的计算机上不存在
sp_updatestats。确实如此。你不可能丢弃它,因为系统对象不能被丢弃,除非使用可怕的黑魔法。 -
是的,但问题的标题是“OBJECT_ID 的返回值错误?”所以有趣的是“理解”从哪里来的 ID -838816646,但真正的问题是,显然,由于数据库中不存在该过程,因此 OBJECT_ID 的返回值是错误的......所以函数是不可靠的 ?这是一个错误吗?
-
sp_是为系统存储过程保留的前缀。切勿将它用于您自己的程序,因为它会导致 a performance hit 并且可能会破坏希望看到系统程序而不是您的程序的应用程序。 -
好的,感谢您提供的有用的最终精度。
标签: sql sql-server tsql ssms