转载:http://www.cnblogs.com/jackson-ou/archive/2009/05/27/1490990.html
这三个视图都是存在于SQL Server的每个数据库中。在SQL Server 2000中,它们都是系统表,而不是视图。
关于两个版本中系统表和系统的视图的对应关系,参考:http://technet.microsoft.com/zh-cn/library/ms187997.aspx
sys.all_objects:显示所有架构范围内的用户定义对象和系统对象,参考 http://technet.microsoft.com/zh-cn/library/ms178618.aspx
sys.sysobjects,sys.objects:在数据库中创建的每个对象(例如约束、默认值、日志、规则以及存储过程)都对应一行,参考http://technet.microsoft.com/zh-cn/library/ms177596.aspx
sys.objects 不显示 DDL 触发器,因为它们不是架构范围内的对象。所有触发器(包括 DML 和 DDL)均位于 sys.triggers 中。sys.triggers 支持对各种触发器应用混合名称范围规则。
在自己的数据库中测试发现,sys.objects,sys.sysobjects视图的内容是完全一致的。
这三个视图的结构比较类似,其中饱含type,id等属性。其中type的取值代表了各种不同的对象类型。对于触发器或者约束对象,parent_obj属性表示父表的id。
Name, ID相关的系统函数:
SCHEMA_NAME ( [ schema_id ] ):返回与架构 ID 关联的架构名称。
OBJECT_NAME ( object_id [, database_id ] ):返回架构范围内对象的数据库对象名称。
OBJECT_ID (object_name [,'object_type' ] )返回架构范围内对象的数据库对象标识号,比包括触发器等;若要返回 DDL 触发器的对象标识号,请使用 SELECT OBJECT_ID FROM sys.triggers WHERE name = 'DatabaseTriggerLog'。
select * from sys.objects --在数据库中创建的每个用户定义的架构范围内的对象在该表中均对应一行。
select * from sys.sysobjects--在数据库中创建的每个对象(例如约束、默认值、日志、规则以及存储过程)都对应一行。
"sys.objects是sys.sysobjects的子集" 应该是正确的
一个是对象表,一个是对象表与其它表相连而形成的视图,便于查询。
下面是从 http://technet.microsoft.com/zh-cn/library/ms187997.aspx
| 系统表 | 系统视图或函数 | 视图或函数类型 |
| sysaltfiles | 目录视图 | |
| syscacheobjects | 动态管理视图 动态管理视图 动态管理视图 动态管理视图 | |
| syscharsets | 兼容性视图 | |
| sysconfigures | 目录视图 | |
| syscurconfigs | 目录视图 | |
| sysdatabases | 目录视图 | |
| sysdevices | 目录视图 | |
| syslanguages | 兼容性视图 | |
| syslockinfo | 动态管理视图 | |
| syslocks | 动态管理视图 | |
| syslogins | 目录视图 | |
| sysmessages | 目录视图 | |
| sysoledbusers | 目录视图 | |
| sysopentapes | 动态管理视图 | |
| sysperfinfo | 动态管理视图 | |
| sysprocesses | 动态管理视图 动态管理视图 动态管理视图 | |
| sysremotelogins | 目录视图 | |
| sysservers | 目录视图 |
本文深入探讨了SQL Server中系统表与系统视图的区别,特别是sys.all_objects、sys.objects和sys.sysobjects这三个核心视图的功能与用途。通过对比,解释了它们在展示数据库对象方面的差异,并提供了实用的SQL查询示例。
531

被折叠的 条评论
为什么被折叠?



