[英]Invalid Object Name Sys.objects
我是sql的新手,正在執行查詢,返回錯誤`無效的對象名'sys.objects'。 我有基本的知識,即列表等存儲在系統架構中,如果正確,那我為什么會收到此錯誤。
SELECT * FROM sys.objects
正確的查詢是:
SELECT * FROM sys.sysobjects
因為第一個sys
是架構,但是表的名稱是sysobjects
並且沒有objects
你也可以寫
SELECT * FROM sysobjects
沒有明確的架構。
在sysobjects
表中,您可以讀取數據庫中存在的所有對象(可以找到表,視圖,SP等)。
我有SQL Server 2000,並使用SELECT * FROM dbo.sysobjects為我工作。 (執行而不是sys)
與許多其他DBMS系統一樣,SQL Server使用目錄視圖和函數公開元數據。 請參閱http://msdn.microsoft.com/en-us/library/ms174365.aspx 。 在SQL Server 2005中,sysobjects(實際上是dbo.sysobjects)已替換為sys.objects,並提供了sysobjects以便向后兼容。
諸如sys.objects之類的目錄視圖通常用於在運行DDL腳本之前聲明數據庫的預期狀態。
這很可能是權限問題。 從SQL Server 2005開始,所有數據庫都具有sys.objects
系統視圖,因此問題中的查詢是正確的。
由於對象名全為小寫,因此這對區分大小寫的數據庫來說不太可能出現問題,因此即使區分大小寫,問題中的查詢仍然是正確的。 當然,這假設正在使用問題中的查詢(全部小寫),而不是標題中的查詢(大小寫混合)。 正如@Sean在對該問題的評論中指出的那樣,大小寫敏感的數據庫中,混合大小寫的系統架構和/或對象名稱將收到“無效對象”錯誤。
我將嘗試查找確切的權限,但是:
尚未授予一些基本權限(即, public
內置數據庫角色的成員身份)
要么
在許可鏈中的某個位置添加了DENY
好吧,有趣。 到目前為止,所有權限嘗試(包括db_denydatareader
內置數據庫角色的成員身份) db_denydatareader
導致以下情況(至少承認sys.objects
的存在):
消息229,第14級,州5,第2行
對對象“ objects”,數據庫“ mssqlsystemresource”,模式“ sys”的SELECT權限被拒絕。
另一個選擇:數據庫的兼容性級別設置為什么? 可能將其設置為80
(與SQL Server 2000相對應) ,這應該具有不了解sys.objects
的效果。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.