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