无效的对象名称Sys.objects

时间:2014-10-01 10:34:57

标签: sql sql-server sql-server-2008 tsql sql-server-2008-r2

我是sql的新手我正在执行一个返回错误``无效的对象名'sys.objects'的查询。 我有基本知识,列表,e.t.c存储在系统模式中,如果为真,我会收到此错误。

SELECT * FROM sys.objects

4 个答案:

答案 0 :(得分:4)

正确的查询是:

SELECT * FROM sys.sysobjects

因为第一个sys是架构,但表的名称是sysobjects而没有objects

你也可以写

SELECT * FROM sysobjects

没有明确的架构。

sysobjects表格中,您可以阅读数据库中存在的所有对象(您可以找到表格,视图,SP等)

答案 1 :(得分:2)

我有SQL Server 2000并使用SELECT * FROM dbo.sysobjects为我工作。 (而不是sys)

答案 2 :(得分:0)

与许多其他DBMS系统一样,SQL Server使用目录视图和函数公开元数据。见http://msdn.microsoft.com/en-us/library/ms174365.aspx。 sysobjects(实际上是dbo.sysobjects)被SQL Server 2005中的sys.objects取代,提供了sysobjects以实现向后兼容。

sys.objects之类的目录视图通常用于在运行DDL脚本之前断言数据库的预期状态。

答案 3 :(得分:0)

这很可能是权限问题。从SQL Server 2005开始,所有数据库都有一个sys.objects系统视图,因此问题中的查询是正确的。

这不太可能是区分大小写的数据库的问题,因为对象名称都是小写的,所以即使区分大小写,问题中的查询仍然是正确的。当然,这假设正在使用问题中的查询(全部小写)和标题中的查询(混合大小写)。正如@Sean在对该问题的评论中所指出的,混合案例系统架构和/或对象名称将收到"无效对象"区分大小写的数据库中的错误。

我会尝试找到确切的权限,但是:

  • 尚未授予某些基本权限(即public内置数据库角色的成员资格)

  • 在权限链的某处添加了DENY


好吧,有趣。到目前为止,所有权限尝试(包括db_denydatareader内置数据库角色的成员身份)都会产生以下结果(至少确认存在sys.objects):

  

Msg 229,Level 14,State 5,Line 2
   对象'对象',数据库' mssqlsystemresource',schema' sys'拒绝了SELECT权限。

另一种选择:数据库设置的compatibility_level是什么?它可能设置为80,对应于SQL Server 2000, 应该<_ em>不知道sys.objects