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-function
FT = 程序集 (CLR) 表值函数
IF = SQL 内联表值函数 (TVF)
IT = 内部表
P = SQL 存储过程
PC = 程序集 (CLR) 存储过程
PG = 计划指南
PK = 主键约束
R = 规则 (旧样式, 独立)
RF = Replication-filter-procedure
S = 系统基表
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_TABLEtype_desc)。ITtype 对于扩展索引:

  • name 是索引表的内部名称
  • parent_object_idobject_id是基表
  • is_ms_shippedis_publishedis_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