导航

这三个视图都是存在于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'。