sys.objects (Transact-SQL)
适用于: SQL Server Azure SQL 数据库 Azure SQL 托管实例 Azure Synapse Analytics 分析平台系统 (PDW) Microsoft Fabric 中的 SQL 分析端点 Microsoft Fabric 中的仓库
包含在数据库中创建的每个用户定义的架构范围内的对象的行,包括本地编译的标量用户定义函数。
有关详细信息,请参阅内存中 OLTP 的标量用户定义函数。
注意
sys.objects
不显示 DDL 触发器,因为它们不是架构范围的。 所有触发器(包括 DML 和 DDL)均位于 sys.triggers 中。 sys.triggers
支持对各种触发器应用混合名称范围规则。
列名称 | 数据类型 | 描述 |
---|---|---|
name |
sysname | 对象名称。 |
object_id |
int | 对象标识号。 在数据库中是唯一的。 |
principal_id |
int | 如果不是架构所有者,则为单个所有者的 ID。 默认情况下,架构包含的对象由架构所有者拥有。 但是,可以使用语句更改所有权来指定 ALTER AUTHORIZATION 备用所有者。NULL 如果没有备用的个人所有者。对象 NULL 类型是否为以下值之一:C = 检查约束D = 默认值(约束或独立)F = 外键约束PK = 主键约束R = 规则 (旧样式, 独立)TA = 程序集 (CLR-integration) 触发器TR = SQL 触发器UQ = 唯一约束EC = Edge 约束 |
schema_id |
int | 包含该对象的架构的 ID。 架构范围内的系统对象始终包含在 sys 或 INFORMATION_SCHEMA 架构中。 |
parent_object_id |
int | 此对象所属对象的 ID。0 = 不是子对象。 |
type |
char(2) | 对象类型:AF = 聚合函数 (CLR)C = 检查约束D = 默认值(约束或独立)F = 外键约束FN = SQL 标量函数FS = Assembly (CLR) scalar-functionFT = 程序集 (CLR) 表值函数IF = SQL 内联表值函数 (TVF)IT = 内部表P = SQL 存储过程PC = 程序集 (CLR) 存储过程PG = 计划指南PK = 主键约束R = 规则 (旧样式, 独立)RF = Replication-filter-procedureS = 系统基表SN = 同义词SO = Sequence 对象U = 表(用户定义的)V = 视图适用于:SQL Server 2012 (11.x) 及更高版本 SQ = 服务队列TA = 程序集 (CLR) DML 触发器TF = SQL table-valued-function (TVF)TR = SQL DML 触发器TT = 表类型UQ = 唯一约束X = 扩展存储过程适用于:SQL Server 2014(12.x)及更高版本、Azure SQL 数据库、Azure Synapse Analytics、Analytics 平台系统(PDW) ST = 统计信息树适用于:SQL Server 2016(13.x)及更高版本、Azure SQL 数据库、Azure Synapse Analytics、Analytics Platform System (PDW) ET = 外部表适用于:SQL Server 2017(14.x)及更高版本、Azure SQL 数据库、Azure Synapse Analytics、Analytics 平台系统(PDW) EC = Edge 约束 |
type_desc |
nvarchar(60) | 对对象类型的说明:AGGREGATE_FUNCTION CHECK_CONSTRAINT CLR_SCALAR_FUNCTION CLR_STORED_PROCEDURE CLR_TABLE_VALUED_FUNCTION CLR_TRIGGER DEFAULT_CONSTRAINT EDGE_CONSTRAINT EXTENDED_STORED_PROCEDURE FOREIGN_KEY_CONSTRAINT INTERNAL_TABLE PLAN_GUIDE PRIMARY_KEY_CONSTRAINT REPLICATION_FILTER_PROCEDURE RULE SEQUENCE_OBJECT SERVICE_QUEUE SQL_INLINE_TABLE_VALUED_FUNCTION SQL_SCALAR_FUNCTION SQL_STORED_PROCEDURE SQL_TABLE_VALUED_FUNCTION SQL_TRIGGER SYNONYM SYSTEM_TABLE TYPE_TABLE UNIQUE_CONSTRAINT USER_TABLE VIEW |
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
是,也是INTERNAL_TABLE
type_desc
)。IT
type
对于扩展索引:
name
是索引表的内部名称parent_object_id
object_id
是基表is_ms_shipped
、is_published
列is_schema_published
和列设置为0
相关系统视图
可以使用特定类型的对象的系统视图来查看对象的子集,例如:
权限
目录视图中仅显示用户拥有的安全对象的元数据,或用户对其拥有某些权限的安全对象的元数据。 有关详细信息,请参阅 Metadata Visibility Configuration。
示例
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
INNER JOIN sys.schemas AS s
ON s.schema_id = xsc.schema_id
WHERE s.name = '<schema_name>';
GO