OBJECTPROPERTYEX (Transact-SQL)

适用于:SQL ServerAzure SQL 数据库Azure SQL 托管实例Azure Synapse Analytics分析平台系统(PDW)Microsoft Fabric 中的 SQL 分析终结点Microsoft Fabric 中的仓库Microsoft Fabric 预览版中的 SQL 数据库

OBJECTPROPERTYEX 函数返回有关当前数据库中架构范围的对象的信息。

有关这些对象的列表,请参阅 sys.objects (Transact-SQL)OBJECTPROPERTYEX 不能用于非架构范围内的对象,例如数据定义语言(DDL)触发器和事件通知。

Transact-SQL 语法约定

语法

OBJECTPROPERTYEX ( id , property )

参数

ID

一个表达式,表示当前数据库中对象的 ID。 IDint ,假定为当前数据库上下文中的架构范围对象。

property

一个表达式,其中包含要为 ID 指定的对象返回的信息。 返回类型 sql_variant。 下表显示了各属性值的基本数据类型。

备注

除非另有说明,NULL否则在属性不是有效的属性名称时返回,ID 不是有效的对象 ID,ID 是指定属性不支持的对象类型,或者调用方无权查看对象的元数据。

属性名称 对象类型 说明和返回的值
BaseType 任何架构范围内的对象 指定对象的基类型。 当指定的对象为 a SYNONYM时,将返回基础对象的基类型。

非 null = 对象类型

基本数据类型:char(2)
CnstIsClustKey 约束 PRIMARY KEY 包含聚集索引的约束。

1 = True

0 = False

基本数据类型:int
CnstIsColumn 约束 CHECKDEFAULTFOREIGN KEY 单个列的约束。

1 = True

0 = False

基本数据类型:int
CnstIsDeleteCascade 约束 FOREIGN KEY 具有 ON DELETE CASCADE 选项的约束。

1 = True

0 = False

基本数据类型:int
CnstIsDisabled 约束 禁用的约束。

1 = True

0 = False

基本数据类型:int
CnstIsNonclustKey 约束 PRIMARY KEY 具有非聚集索引的约束。

1 = True

0 = False

基本数据类型:int
CnstIsNotRepl 约束 使用关键字定义 NOT FOR REPLICATION 约束。

1 = True

0 = False

基本数据类型:int
CnstIsNotTrusted 约束 启用约束时未检查现有行。 因此,约束可能不会保留所有行。

1 = True

0 = False

基本数据类型:int
CnstIsUpdateCascade 约束 FOREIGN KEY 具有 ON UPDATE CASCADE 选项的约束。

1 = True

0 = False

基本数据类型:int
ExecIsAfterTrigger 触发器 AFTER 触发。

1 = True

0 = False

基本数据类型:int
ExecIsAnsiNullsOn Transact-SQL 函数、Transact-SQL 过程、Transact-SQL 触发器、视图 创建时的设置 ANSI_NULLS

1 = True

0 = False

基本数据类型:int
ExecIsDeleteTrigger 触发器 DELETE 触发。

1 = True

0 = False

基本数据类型:int
ExecIsFirstDeleteTrigger 触发器 对表执行第一个 DELETE 触发器时触发。

1 = True

0 = False

基本数据类型:int
ExecIsFirstInsertTrigger 触发器 对表执行第一个 INSERT 触发器时触发。

1 = True

0 = False

基本数据类型:int
ExecIsFirstUpdateTrigger 触发器 对表执行第一个 UPDATE 触发器时触发。

1 = True

0 = False

基本数据类型:int
ExecIsInsertTrigger 触发器 INSERT 触发。

1 = True

0 = False

基本数据类型:int
ExecIsInsteadOfTrigger 触发器 INSTEAD OF 触发。

1 = True

0 = False

基本数据类型:int
ExecIsLastDeleteTrigger 触发器 对表执行最后一个 DELETE 触发器时触发。

1 = True

0 = False

基本数据类型:int
ExecIsLastInsertTrigger 触发器 对表执行最后一个 INSERT 触发器时触发。

1 = True

0 = False

基本数据类型:int
ExecIsLastUpdateTrigger 触发器 对表执行最后一个 UPDATE 触发器时触发。

1 = True

0 = False

基本数据类型:int
ExecIsQuotedIdentOn Transact-SQL 函数、Transact-SQL 过程、Transact-SQL 触发器、视图 QUOTED_IDENTIFIER创建时设置。

1 = True

0 = False

基本数据类型:int
ExecIsStartup 过程 启动过程。

1 = True

0 = False

基本数据类型:int
ExecIsTriggerDisabled 触发器 禁用的触发器。

1 = True

0 = False

基本数据类型:int
ExecIsTriggerNotForRepl 触发器 定义为 NOT FOR REPLICATION..

1 = True

0 = False

基本数据类型:int
ExecIsUpdateTrigger 触发器 UPDATE 触发。

1 = True

0 = False

基本数据类型:int
ExecIsWithNativeCompilation Transact-SQL 过程 适用于:SQL Server 2014 (12.x) 及更高版本。

本机编译过程。

1 = True

0 = False

基本数据类型:int
HasAfterTrigger 表或视图 表或视图具有 AFTER 触发器。

1 = True

0 = False

基本数据类型:int
HasDeleteTrigger 表或视图 表或视图具有 DELETE 触发器。

1 = True

0 = False

基本数据类型:int
HasInsertTrigger 表或视图 表或视图具有 INSERT 触发器。

1 = True

0 = False

基本数据类型:int
HasInsteadOfTrigger 表或视图 表或视图具有 INSTEAD OF 触发器。

1 = True

0 = False

基本数据类型:int
HasUpdateTrigger 表或视图 表或视图具有 UPDATE 触发器。

1 = True

0 = False

基本数据类型:int
IsAnsiNullsOn Transact-SQL 函数、Transact-SQL 过程、表、Transact-SQL 触发器、视图 指定 ANSI NULLS 表的选项设置是 ON,这意味着所有与 null 值进行比较的计算结果为 UNKNOWN。 只要表存在,此设置就会应用于表定义中的所有表达式,包括计算列和约束。

1 = True

0 = False

基本数据类型:int
IsCheckCnst 任何架构范围内的对象 CHECK 约束。

1 = True

0 = False

基本数据类型:int
IsConstraint 任何架构范围内的对象 约束。

1 = True

0 = False

基本数据类型:int
IsDefault 任何架构范围内的对象 适用于:SQL Server 2008 (10.0.x) 及更高版本。

绑定的默认值。

1 = True

0 = False

基本数据类型:int
IsDefaultCnst 任何架构范围内的对象 DEFAULT 约束。

1 = True

0 = False

基本数据类型:int
IsDeterministic 标量值函数和表值函数、视图 函数或视图的确定性属性。

1 = 确定

0 = 不确定

基本数据类型:int
IsEncrypted Transact-SQL 函数、Transact-SQL 过程、表、Transact-SQL 触发器、视图 指示模块语句的原始文本已转换为模糊格式。 模糊代码的输出在 SQL Server 2005 (9.x) 的任何目录视图中都不能直接显示。 对系统表或数据库文件没有访问权限的用户不能检索模糊文本。 但是,可以通过 数据库管理员的诊断连接 访问系统表或直接访问数据库文件的用户可以使用文本。 此外,能够向服务器进程附加调试器的用户可在运行时从内存中检索原始过程。

1 = 已加密

0 = 未加密

基本数据类型:int
IsExecuted 任何架构范围内的对象 指定可以执行对象(视图、过程、函数或触发器)。

1 = True

0 = False

基本数据类型:int
IsExtendedProc 任何架构范围内的对象 扩展过程。

1 = True

0 = False

基本数据类型:int
IsForeignKey 任何架构范围内的对象 FOREIGN KEY 约束。

1 = True

0 = False

基本数据类型:int
IsIndexed 表或视图 具有索引的表或视图。

1 = True

0 = False

基本数据类型:int
IsIndexable 表或视图 可对其创建索引的表或视图。

1 = True

0 = False

基本数据类型:int
IsInlineFunction 函数 内联函数。

1 = 内联函数

0 = 非内联函数

基本数据类型:int
IsMSShipped 任何架构范围内的对象 一个在安装 SQL Server 过程中创建的对象。

1 = True

0 = False

基本数据类型:int
IsPrecise 计算列、函数、用户定义类型、视图 指示对象是否包含不精确计算,如浮点运算。

1 = 精确

0 = 不精确

基本数据类型:int
IsPrimaryKey 任何架构范围内的对象 PRIMARY KEY 约束。

1 = True

0 = False

基本数据类型:int
IsProcedure 任何架构范围内的对象 过程。

1 = True

0 = False

基本数据类型:int
IsQuotedIdentOn CHECK constraint, DEFAULT definition, Transact-SQL function, Transact-SQL procedure, table, Transact-SQL trigger, view 指定对象的带引号标识符设置, ON这意味着对象定义中涉及的所有表达式中的双引号分隔标识符。

1 = True

0 = False

基本数据类型:int
IsQueue 任何架构范围内的对象 Service Broker 队列

1 = True

0 = False

基本数据类型:int
IsReplProc 任何架构范围内的对象 复制过程。

1 = True

0 = False

基本数据类型:int
IsRule 任何架构范围内的对象 绑定规则。

1 = True

0 = False

基本数据类型:int
IsScalarFunction 函数 标量值函数。

1 = 标量值函数

0 = 非标量值函数

基本数据类型:int
IsSchemaBound 函数、过程、视图 使用 . SCHEMABINDING. 创建的架构绑定函数或视图。

1 = 绑定到架构

0 = 不绑定到架构

基本数据类型:int
IsSystemTable 系统表。

1 = True

0 = False

基本数据类型:int
IsSystemVerified 计算列、函数、用户定义类型、视图 对象的精度和确定性属性可以由 SQL Server 进行验证。

1 = True

0 = False

基本数据类型:int
IsTable 表。

1 = True

0 = False

基本数据类型:int
IsTableFunction 函数 表值函数。

1 = 表值函数

0 = 非表值函数

基本数据类型:int
IsTrigger 任何架构范围内的对象 触发器。

1 = True

0 = False

基本数据类型:int
IsUniqueCnst 任何架构范围内的对象 UNIQUE 约束。

1 = True

0 = False

基本数据类型:int
IsUserTable 用户定义的表。

1 = True

0 = False

基本数据类型:int
IsView 视图 视图。

1 = True

0 = False

基本数据类型:int
OwnerId 任何架构范围内的对象 对象的所有者。

注意: 架构所有者不一定是对象所有者。 例如,子对象(其中 parent_object_id 非 null 对象)将始终返回与父级相同的所有者 ID。

非 null = 对象所有者的数据库用户 ID。

NULL = 不支持的对象类型,或对象 ID 无效。

基本数据类型:int
SchemaId 任何架构范围内的对象 与对象关联的架构的 ID。

非 null = 对象的架构 ID。

基本数据类型:int
SystemDataAccess 函数或视图 对象访问 SQL Server 本地实例中的系统数据、系统目录或虚拟系统表。

0 = 无

1 = 读取

基本数据类型:int
TableDeleteTrigger 表具有 DELETE 触发器。

>1 = 指定类型的第一个触发器的 ID。

基本数据类型:int
TableDeleteTriggerCount 该表具有指定的触发器数 DELETE

Nonnull = 触发器数DELETE

基本数据类型:int
TableFullTextMergeStatus 适用于:SQL Server 2008 (10.0.x) 及更高版本。

表所具有的全文检索当前是否正在合并。

0 = 表没有全文检索,或者全文检索未在合并。

1 = 全文检索正在合并。
TableFullTextBackgroundUpdateIndexOn 适用于:SQL Server 2008 (10.0.x) 及更高版本。

表已启用全文后台更新索引(自动更改跟踪)。

1 = TRUE

0 = FALSE

基本数据类型:int
TableFulltextCatalogId 适用于:SQL Server 2008 (10.0.x) 及更高版本。

表的全文检索数据所在的全文目录的 ID。

非零 = 全文目录 ID,它与全文检索表中标识行的唯一索引相关。

0 = 表没有全文检索。

基本数据类型:int
TableFullTextChangeTrackingOn 适用于:SQL Server 2008 (10.0.x) 及更高版本。

表已启用全文更改跟踪。

1 = TRUE

0 = FALSE

基本数据类型:int
TableFulltextDocsProcessed 适用于:SQL Server 2008 (10.0.x) 及更高版本。

自开始全文检索以来所处理的行数。 在为进行全文搜索而正在编制索引的表中,将一个行的所有列视为要编制索引的文档的一部分。

0 = 没有完成的活动爬网或全文检索。

> 0 = 以下结果之一(A 或 B):A) 自从执行以下操作以来由插入或更新操作处理的文档数:开始完整、增量或手动的更改跟踪填充功能;B) 自从执行以下操作以来由插入或更新操作处理的行数:启用具有后台更新索引填充功能的更改跟踪、更改全文检索架构、重建全文目录或重启 SQL Server 的实例等。

NULL = 表没有全文索引。

基本数据类型:int

注意 此属性不监视删除的行,也不对删除的行进行计数。
TableFulltextFailCount 适用于:SQL Server 2008 (10.0.x) 及更高版本。

全文搜索未索引的行数。

0 = 填充已完成。

>0 = 以下结果之一(A 或 B):A) 自从开始完整、增量和手动更新更改跟踪填充以来未编制索引的文档数;B) 对于有后台更新索引的更改跟踪,则为自从开始填充或重启填充以来未编制索引的行数。 这可以由架构更改、目录重建、服务器重新启动等等导致。

NULL = 表没有 Full-Text 索引。

基本数据类型:int
TableFulltextItemCount 适用于:SQL Server 2008 (10.0.x) 及更高版本。

非 null = 已成功为全文编制索引的行数。

NULL = 表没有全文索引。

基本数据类型:int
TableFulltextKeyColumn 适用于:SQL Server 2008 (10.0.x) 及更高版本。

与作为全文检索和语义索引定义的一部分的单列唯一索引关联的列的 ID。

0 = 表没有全文检索。

基本数据类型:int
TableFulltextPendingChanges 适用于:SQL Server 2008 (10.0.x) 及更高版本。

要处理的挂起更改跟踪项的数目。

0 = 不启用更改跟踪。

NULL = 表没有全文索引。

基本数据类型:int
TableFulltextPopulateStatus 适用于:SQL Server 2008 (10.0.x) 及更高版本。

0 = 空闲。

1 = 完整填充正在进行中。

2 = 增量填充正在进行中。

3 = 跟踪更改的传播正在进行中。

4 = 正在进行后台更新索引(例如,自动跟踪更改)。

5 = 全文索引已中止或暂停。

6 = 发生了错误。 检查爬网日志了解详细信息。 有关详细信息,请参阅填充全文检索的“排除全文填充(爬网)中的错误”一节

基本数据类型:int
TableFullTextSemanticExtraction 适用于:SQL Server 2012(11.x)及更高版本。

支持对表进行语义索引。

1 = True

0 = False

基本数据类型:int
TableHasActiveFulltextIndex 适用于:SQL Server 2008 (10.0.x) 及更高版本。

表具有活动全文检索。

1 = True

0 = False

基本数据类型:int
TableHasCheckCnst 表具有 CHECK 约束。

1 = True

0 = False

基本数据类型:int
TableHasClustIndex 表具有聚集索引。

1 = True

0 = False

基本数据类型:int
TableHasDefaultCnst 表具有 DEFAULT 约束。

1 = True

0 = False

基本数据类型:int
TableHasDeleteTrigger 表具有 DELETE 触发器。

1 = True

0 = False

基本数据类型:int
TableHasForeignKey 表具有 FOREIGN KEY 约束。

1 = True

0 = False

基本数据类型:int
TableHasForeignRef 表由 FOREIGN KEY 约束引用。

1 = True

0 = False

基本数据类型:int
TableHasIdentity 表具有标识列。

1 = True

0 = False

基本数据类型:int
TableHasIndex 表具有任意类型的索引。

1 = True

0 = False

基本数据类型:int
TableHasInsertTrigger 对象具有 INSERT 触发器。

1 = True

0 = False

基本数据类型:int
TableHasNonclustIndex 表具有非聚集索引。

1 = True

0 = False

基本数据类型:int
TableHasPrimaryKey 表具有主键。

1 = True

0 = False

基本数据类型:int
TableHasRowGuidCol 表具有 ROWGUIDCOLuniqueidentifier 列。

1 = True

0 = False

基本数据类型:int
TableHasTextImage 表具有 text、ntext 或 image 列

1 = True

0 = False

基本数据类型:int
TableHasTimestamp 表具有 timestamp 列

1 = True

0 = False

基本数据类型:int
TableHasUniqueCnst 表具有 UNIQUE 约束。

1 = True

0 = False

基本数据类型:int
TableHasUpdateTrigger 该对象具有触发器 UPDATE

1 = True

0 = False

基本数据类型:int
TableHasVarDecimalStorageFormat 为 vardecimal 存储格式启用了表

1 = True

0 = False
TableInsertTrigger 表具有触发器 INSERT

>1 = 指定类型的第一个触发器的 ID。

基本数据类型:int
TableInsertTriggerCount 该表具有指定的触发器数 INSERT

>0 = 触发器数 INSERT

基本数据类型:int
TableIsFake 表不是真实的表。 它将由数据库引擎根据需要在内部进行具体化。

1 = True

0 = False

基本数据类型:int
TableIsLockedOnBulkLoad 表因 bcpBULK INSERT 作业而锁定。

1 = True

0 = False

基本数据类型:int
TableIsMemoryOptimized 适用于:SQL Server 2014 (12.x) 及更高版本。

表是内存优化表

1 = True

0 = False

基本数据类型:int

有关详细信息,请参阅 In-Memory OLTP 概述和使用情况方案
TableIsPinned 驻留表以将其保留在数据缓存中。

0 = False

SQL Server 2005 (9.x) 及更高版本不支持此功能。
TableTextInRowLimit 表设置了 text in row 选项。

> 0 = text in row 所允许的最大字节数。

0 = 未设置 text in row option 选项。

基本数据类型:int
TableUpdateTrigger 表具有触发器 UPDATE

> 1 = 指定类型的第一个触发器的 ID。

基本数据类型:int
TableUpdateTriggerCount 表具有指定的触发器数 UPDATE

> 0 = 触发器数 UPDATE

基本数据类型:int
UserDataAccess 函数或视图 指示对象访问 SQL Server 本地实例中的用户数据和用户表。

1 = 读取

0 = 无

基本数据类型:int
TableHasColumnSet 表具有列集。

0 = False

1 = True

有关详细信息,请参阅 “使用列集”。
Cardinality 表(系统或用户定义)、视图或索引 适用于:SQL Server 2012(11.x)及更高版本。

指定对象中的行数。
TableTemporalType 适用于:SQL Server 2016(13.x)及更高版本。

指定表的类型。

0 = 非时态表

1 = 系统版本控制表的历史记录表

2 = 系统版本控制时态表

返回类型

sql_variant

例外

返回 NULL 错误或调用方没有查看对象的权限。

用户只能查看符合如下条件的安全对象的元数据:该安全对象为该用户所有,或已授予该用户对该安全对象的权限。 这意味着,如果用户对对象没有任何权限,则元数据发出的内置函数(如 OBJECTPROPERTYEX)可能会返回 NULL 。 有关详细信息,请参阅 元数据可见性配置

注解

数据库引擎 假定 object_id 位于当前数据库上下文中。 引用另一个数据库中 object_id 的查询返回 NULL 或结果不正确。 例如,在以下查询中,当前数据库上下文是 master 数据库。 数据库引擎尝试返回该数据库中指定 object_id 的属性值,而不是在查询中指定的数据库。 查询返回错误的结果,因为视图 vEmployee 不在 master 数据库中。

USE master;
GO
SELECT OBJECTPROPERTYEX(OBJECT_ID(N'AdventureWorks2022.HumanResources.vEmployee'), 'IsView');
GO

OBJECTPROPERTYEX(view_id, 'IsIndexable') 可能会消耗大量计算机资源,因为对 IsIndexable 属性的评估需要分析视图定义、规范化和部分优化。 尽管 IsIndexable 属性可以标识出能编制索引的表或视图,但在实际创建索引时,如果不能满足某些索引键要求,创建过程仍然可能会失败。 有关详细信息,请参阅 CREATE INDEX (Transact-SQL)

OBJECTPROPERTYEX (table_id, 'TableHasActiveFulltextIndex') 为索引添加表的至少一列时,返回值 1(true)。 只要添加了用于索引的第一列后,全文检索即可用于填充。

对元数据可视性的限制将应用于结果集。 有关详细信息,请参阅 元数据可见性配置

示例

A. 查找对象的基类型

以下示例为数据库中的创建一个,然后返回 <a0/> 的基类型。

USE AdventureWorks2022;
GO
CREATE SYNONYM MyEmployeeTable FOR HumanResources.Employee;
GO
SELECT OBJECTPROPERTYEX ( object_id(N'MyEmployeeTable'), N'BaseType')AS [Base Type];
GO

结果集显示基础对象(Employee 表)的基类型是用户表。

Base Type
--------
U

B. 返回属性值

以下示例返回指定表中的 UPDATE 触发器数。

USE AdventureWorks2022;
GO
SELECT OBJECTPROPERTYEX(OBJECT_ID(N'HumanResources.Employee'), N'TABLEUPDATETRIGGERCOUNT');
GO

C. 查找具有 FOREIGN KEY 约束的表

以下示例使用 TableHasForeignKey 属性返回具有 FOREIGN KEY 约束的所有表。

USE AdventureWorks2022;
GO
SELECT name, object_id, schema_id, type_desc
FROM sys.objects
WHERE OBJECTPROPERTYEX(object_id, N'TableHasForeignKey') = 1
ORDER BY name;
GO

示例:Azure Synapse Analytics 和 Analytics Platform System (PDW)

D:查找对象的基类型

下例返回 dbo.DimReseller 对象的基类型。

-- Uses AdventureWorks

SELECT OBJECTPROPERTYEX ( object_id(N'dbo.DimReseller'), N'BaseType')AS BaseType;

结果集显示基础对象(dbo.DimReseller 表)的基类型是用户表。

BaseType
--------
U