转载: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
分享到:
相关推荐
- SQL Server 2005中使用的“sys.objects”可以替换为SQL Server 2000中的“dbo.sysobjects”。 - 对应字段“object_id”替换为“id”。 ```sql -- 替换示例 SELECT * FROM dbo.sysobjects WHERE id = <原...
在安装SQL Server过程中遇到“有挂起的操作”提示时,这通常是因为系统中存在未完成的安装或者更新任务。解决方法通常涉及以下几个步骤: 1. **清理挂起的操作**:通过命令行工具或控制面板的应用程序卸载功能,...
在IT领域,特别是数据库管理与开发中,存储过程(Stored Procedure)是SQL Server等数据库管理系统中的一个重要特性。存储过程是一种预编译的SQL语句集合,它可以被当作一个单独的对象在数据库中创建并保存,之后...
在SQL Server的发展历程中,SQL2000和SQL2005是两个重要的版本,它们在语法上有一定的差异和改进。本篇文章将详细对比这两个版本在特定语法和功能上的不同,帮助理解如何在不同版本间进行过渡和适应。 首先,我们来...
在SQL Server中,获取数据库中所有表的名称及其数据条数是常见的管理任务,这对于数据库维护、性能优化和数据量统计至关重要。以下是三种常见的方法来实现这一目标: **方法一:利用`sp_spaceused`存储过程** 这种...
在SQL Server中,可以使用`sys.databases`系统视图来获取所有数据库的名称。例如: ```sql SELECT name FROM sys.databases; ``` 2. **获取所有用户表**: 用户表指的是由用户创建的表,而不是系统内置的表。...
在SQL Server中,元数据是关于数据库对象如表、视图、索引、存储过程等信息的数据,它描述了数据库的结构和内容。获取元数据是数据库管理和开发中不可或缺的一部分,帮助我们理解数据库的现状,进行数据库设计和优化...
- SQL Server 使用 `sysobjects` 和 `sysconstraints` 或 `sys.foreign_keys` 来查找主键和外键,而 Oracle 则使用 `user_constraints` 和 `constraint_type`。 9. **查询列名**: - SQL Server 的 `syscolumns` ...
在SQL Server 2005中,我们可以使用`sys.columns`、`sys.types`、`sys.default_constraints`、`sys.extended_properties`、`sys.foreign_key_columns`等系统视图获取更丰富的信息,如最大长度、精度、小数位数,并且...
以下是如何在SQL Server 2000和SQL Server 2005中实现这一目标的方法。 在SQL Server 2000中,可以使用以下查询来获取表名、字段序号、字段名、是否为主键、字段类型、占用字节数、长度、小数位数、是否允许空、...
在SQL数据库中获取所有表的字段及其中文描述是一项常见的需求,这对于数据库管理和数据分析至关重要。以下将详细介绍如何实现这一目标,以及涉及到的相关SQL语法。 在SQL Server 2000中,可以通过以下查询来获取...
这样做可以解决因版本差异引起的语法问题,例如`sys.objects`与`dbo.sysobjects`的区别。 在实际操作中,应根据具体需求和数据库的复杂性选择合适的方法。对于大型数据库,可能需要结合多种方法,并仔细测试以确保...
在新的SQL Server版本中,`sys.objects`取代了`sysobjects`,提供了更丰富的信息,包括用户定义的架构范围内的所有对象。 在处理临时表时,可以使用`OBJECT_ID`函数来检查临时表是否存在,比如`IF OBJECT_ID('...
在SQL Server中,管理和查询数据库信息是数据库管理员和开发人员日常工作中不可或缺的一部分。本文将详细介绍如何获取SQL Server中的各种对象信息,包括数据库用户、数据表、列、备注说明以及主外键。 首先,我们来...
为了在SQL Server环境中管理多个数据库,了解如何获取所有数据库的名称是非常重要的。这有助于进行备份、恢复操作或是简单地查看服务器上的数据库配置。 **SQL 语句**: ```sql SELECT Name FROM Master.....
在SQL Server中,获取数据库、数据表以及列的相关信息是数据库管理员和开发人员日常工作中常见的需求。本篇文章将详细介绍如何使用SQL语句来查询这些信息。 首先,我们可以通过以下SQL语句来获取所有用户表的名称:...
其中 `sysobjects` 更适用于早期版本的 SQL Server,而 `sys.tables` 则适用于 SQL Server 2005 及其之后的版本。 **SQL 代码示例**: ```sql IF EXISTS (SELECT * FROM sys.objects WHERE name = N'[表名]' AND ...
`sysobjects`系统表(在较旧版本的SQL Server中)或`sys.tables`系统视图(在新版本中)可以用来检查表的存在。例如,查找名为`MyTable`的表: ```sql IF EXISTS (SELECT * FROM sys.objects WHERE id = object_...
`sys.objects`包含了`sysobjects`的所有信息,同时支持更多现代特性和SQL Server的扩展。 另一方面,`syscolumns`视图提供了关于表和视图中列的详细信息,包括: 1. `name`: 列名,每个表或视图的列都有其独特的...
在SQL Server中,判断表或临时表是否存在是数据库管理和开发中的常见需求,这有助于避免重复创建或误操作。以下是一些常用的方法: 1. **判断数据表是否存在**: - 方法一:使用`object_id()`函数。这个函数返回...