2016-11-09 121 views
4

在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中?
+0

從[精細手冊](https://msdn.microsoft.com/library/ms190324):「這個視圖的一個版本具有相同的模式,名爲'sys.system_objects',它顯示系統對象。還有另一個叫做'sys.all_objects'的視圖,它顯示了系統和用戶對象,所有這三個目錄視圖都具有相同的結構。「 'sp_updatestats'是一個系統對象。 –

+1

您似乎認爲'sp_updatestats'在您的機器上不存在。它的確如此。你不能放棄它,因爲系統對象不能被丟棄,除非使用可怕的黑色魔法。 –

+0

「爲什麼程序出現在sys.sysobjects和sys.system_objects中,而不是sys.objects中應該是我們應該使用的新視圖?」因爲微軟這樣設計的?你幾乎從來沒有任何用於查詢系統對象的東西,所以他們沒有把它放在'sys.objects'中,而是將視圖拆分爲僅用於用戶對象的'sys.objects'和'sys.system_objects'對於系統對象,如果由於某種原因你真的想要所有*對象,則用'sys.all_objects'。 Books Online沒有在「映射系統表」中直接提到這一點。 –

回答

2

它將被存儲在數據庫Master視圖sysobjects

select * FROM master.sys.sysobjects WHERE name='sp_UpdateStats' 

結果:-838816646

+0

事實上,它在那裏sys.sysobjects ...但我不明白是不是假設貶低一個和sys.objects取代?爲什麼它會出現在sys.sysobjects程序已被刪除?它是否具有向後兼容性'舊'表的錯誤? – fasa

1

使用sys.all_objects到包括系統對象。

SELECT * 
FROM sys.all_objects 
WHERE NAME = 'sp_UpdateStats' 

其定義實際上是在資源數據庫中。