在Microsoft SQL Server的2014(SP2-CU1)(KB3178925) - 在Windows 12.0.5511.0(X64) 2016年8月19日14點32分30秒 版權所有(c)Microsoft公司 企業版(64位) NT 6.1(生成7601:Service Pack 1的)(管理程序)OBJECT_ID的錯誤返回值?
與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中?
從[精細手冊](https://msdn.microsoft.com/library/ms190324):「這個視圖的一個版本具有相同的模式,名爲'sys.system_objects',它顯示系統對象。還有另一個叫做'sys.all_objects'的視圖,它顯示了系統和用戶對象,所有這三個目錄視圖都具有相同的結構。「 'sp_updatestats'是一個系統對象。 –
您似乎認爲'sp_updatestats'在您的機器上不存在。它的確如此。你不能放棄它,因爲系統對象不能被丟棄,除非使用可怕的黑色魔法。 –
「爲什麼程序出現在sys.sysobjects和sys.system_objects中,而不是sys.objects中應該是我們應該使用的新視圖?」因爲微軟這樣設計的?你幾乎從來沒有任何用於查詢系統對象的東西,所以他們沒有把它放在'sys.objects'中,而是將視圖拆分爲僅用於用戶對象的'sys.objects'和'sys.system_objects'對於系統對象,如果由於某種原因你真的想要所有*對象,則用'sys.all_objects'。 Books Online沒有在「映射系統表」中直接提到這一點。 –