sys.objects (Transact-SQL)
在数据库中创建的每个用户定义的架构范围内的对象在该表中均对应一行。
注意 |
---|
sys.objects 不显示 DDL 触发器,因为它们不是架构范围内的对象。所有触发器(包括 DML 和 DDL)都位于 sys.triggers 中。sys.triggers 支持用于各种触发器的混合作用域命名规则。 |
列名 |
数据类型 |
说明 |
---|---|---|
name |
sysname |
对象名。 |
object_id |
int |
对象标识号。在数据库中是唯一的。 |
principal_id |
int |
如果不是架构所有者,则为单个所有者的 ID。默认情况下,架构包含的对象由架构所有者拥有。不过,通过使用 ALTER AUTHORIZATION 语句更改所有权可以指定备用所有者。 如果没有备用的单个所有者,则为 NULL。 如果对象类型为下列类型之一,则为 NULL: C = CHECK 约束 D = DEFAULT(约束或独立) F = FOREIGN KEY 约束 PK = PRIMARY KEY 约束 R = 规则(旧式,独立) TA = 程序集(CLR 集成)触发器 TR = SQL 触发器 UQ = UNIQUE 约束 |
schema_id |
int |
包含该对象的架构的 ID。 始终包含在 sys 或 INFORMATION_SCHEMA 架构中的架构范围内的系统对象。 |
parent_object_id |
int |
此对象所属对象的 ID。 0 = 不是子对象。 |
type |
char(2) |
对象类型: AF = 聚合函数 (CLR) C = CHECK 约束 D = DEFAULT(约束或独立) F = FOREIGN KEY 约束 FN = SQL 标量函数 FS = 程序集 (CLR) 标量函数 FT = 程序集 (CLR) 表值函数 IF = SQL 内联表值函数 IT = 内部表 P = SQL 存储过程 PC = 程序集 (CLR) 存储过程 PG = 计划指南 PK = PRIMARY KEY 约束 R = 规则(旧式,独立) RF = 复制筛选过程 S = 系统基表 SN = 同义词 SQ = 服务队列 TA = 程序集 (CLR) DML 触发器 TF = SQL 表值函数 TR = SQL DML 触发器 TT = 表类型 U = 表(用户定义类型) UQ = UNIQUE 约束 V = 视图 X = 扩展存储过程 |
type_desc |
nvarchar(60) |
对对象类型的说明: AGGREGATE_FUNCTION CHECK_CONSTRAINT DEFAULT_CONSTRAINT FOREIGN_KEY_CONSTRAINT SQL_SCALAR_FUNCTION CLR_SCALAR_FUNCTION CLR_TABLE_VALUED_FUNCTION SQL_INLINE_TABLE_VALUED_FUNCTION INTERNAL_TABLE SQL_STORED_PROCEDURE CLR_STORED_PROCEDURE PLAN_GUIDE PRIMARY_KEY_CONSTRAINT RULE REPLICATION_FILTER_PROCEDURE SYSTEM_TABLE SYNONYM SERVICE_QUEUE CLR_TRIGGER SQL_TABLE_VALUED_FUNCTION SQL_TRIGGER TABLE_TYPE USER_TABLE UNIQUE_CONSTRAINT VIEW EXTENDED_STORED_PROCEDURE |
create_date |
datetime |
对象的创建日期。 |
modify_date |
datetime |
上次使用 ALTER 语句修改对象的日期。如果对象为表或视图,则创建或修改表或视图的聚集索引时,modify_date 也会随之更改。 |
is_ms_shipped |
bit |
对象由内部 SQL Server 组件创建。 |
is_published |
bit |
对象为发布对象。 |
is_schema_published |
bit |
仅发布对象的架构。 |
注释
可将 OBJECT_ID、OBJECT_NAME 和 OBJECTPROPERTY() 内置函数应用于 sys.objects 中显示的对象。
此视图有一个具有相同架构的版本,名为 sys.system_objects,该版本显示系统对象。还有另一个同时显示系统对象和用户对象的视图,名为 sys.all_objects。所有这三个目录视图的结构都相同。
在此版本的 SQL Server 中,扩展索引(例如 XML 索引或空间索引)将视为 sys.objects 中的内部表(type = IT,type_desc = INTERNAL_TABLE)。对于扩展索引:
name 是索引表的内部名称。
parent_object_id 是基表的 object_id。
is_ms_shipped、is_published 和 is_schema_published 列设置为 0。
示例
A. 返回在最近 N 天内修改过的所有对象
运行以下查询之前,请使用有效值替换 <database_name> 和 <n_days>。
USE <database_name>;
GO
SELECT name AS object_name
,SCHEMA_NAME(schema_id) AS schema_name
,type_desc
,create_date
,modify_date
FROM sys.objects
WHERE modify_date > GETDATE() - <n_days>
ORDER BY modify_date;
GO
B. 返回指定存储过程或函数的参数
运行以下查询之前,请使用有效名称替换 <database_name> 和 <schema_name.object_name>。
USE <database_name>;
GO
SELECT SCHEMA_NAME(schema_id) AS schema_name
,o.name AS object_name
,o.type_desc
,p.parameter_id
,p.name AS parameter_name
,TYPE_NAME(p.user_type_id) AS parameter_type
,p.max_length
,p.precision
,p.scale
,p.is_output
FROM sys.objects AS o
INNER JOIN sys.parameters AS p ON o.object_id = p.object_id
WHERE o.object_id = OBJECT_ID('<schema_name.object_name>')
ORDER BY schema_name, object_name, p.parameter_id;
GO
C. 返回数据库中的所有用户定义函数
运行以下查询之前,请使用有效数据库名称替换 <database_name>。
USE <database_name>;
GO
SELECT name AS function_name
,SCHEMA_NAME(schema_id) AS schema_name
,type_desc
,create_date
,modify_date
FROM sys.objects
WHERE type_desc LIKE '%FUNCTION%';
GO
D. 返回架构中每个对象的所有者。
运行以下查询之前,请使用有效名称替换所有的 <database_name> 和 <schema_name>。
USE <database_name>;
GO
SELECT 'OBJECT' AS entity_type
,USER_NAME(OBJECTPROPERTY(object_id, 'OwnerId')) AS owner_name
,name
FROM sys.objects WHERE SCHEMA_NAME(schema_id) = '<schema_name>'
UNION
SELECT 'TYPE' AS entity_type
,USER_NAME(TYPEPROPERTY(SCHEMA_NAME(schema_id) + '.' + name, 'OwnerId')) AS owner_name
,name
FROM sys.types WHERE SCHEMA_NAME(schema_id) = '<schema_name>'
UNION
SELECT 'XML SCHEMA COLLECTION' AS entity_type
,COALESCE(USER_NAME(xsc.principal_id),USER_NAME(s.principal_id)) AS owner_name
,xsc.name
FROM sys.xml_schema_collections AS xsc JOIN sys.schemas AS s
ON s.schema_id = xsc.schema_id
WHERE s.name = '<schema_name>';
GO