簡體   English   中英

無效的對象名稱Sys.objects

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM