sys.objects (Transact-SQL)

适用于:SQL ServerAzure SQL 数据库Azure SQL 托管实例Azure Synapse AnalyticsAnalytics Platform System (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