OBJECTPROPERTYEX (Transact-SQL)
适用于: SQL Server Azure SQL 数据库 Azure SQL 托管实例 Azure Synapse Analytics 分析平台系统 (PDW) Microsoft Fabric 中的 SQL 分析端点 Microsoft Fabric 中的仓库
返回当前数据库中架构范围内的对象的相关信息。 有关这些对象的列表,请参阅 sys.objects (Transact-SQL)。 OBJECTPROPERTYEX 不能用于非架构范围内的对象,如数据定义语言 (DDL) 触发器和事件通知。
语法
OBJECTPROPERTYEX ( id , property )
参数
id
是表示当前数据库中对象 ID 的表达式。 id 的数据类型为 int,并假定为当前数据库上下文中的架构范围内的对象。
property
一个表达式,包含要为 ID 所指定的对象返回的信息。返回类型为 sql_variant。 下表显示了各属性值的基本数据类型。
备注
除非另外注明,否则出现以下情况时将返回 NULL:property 不是有效的属性名称;id 不是有效的对象 ID;id 不是指定属性支持的对象类型;调用方无权查看对象的元数据。
属性名称 | 对象类型 | 说明和返回的值 |
---|---|---|
BaseType | 任何架构范围内的对象 | 指定对象的基类型。 当指定的对象为 SYNONYM 时,将返回基础对象的基类型。 Nonnull = 对象类型 基本数据类型:char(2) |
CnstIsClustKey | 约束 | 具有聚集索引的 PRIMARY KEY 约束。 1 = True 0 = False 基本数据类型:int |
CnstIsColumn | 约束 | 单个列上的 CHECK、DEFAULT 或 FOREIGN KEY 约束。 1 = True 0 = False 基本数据类型:int |
CnstIsDeleteCascade | 约束 | 具有 ON DELETE CASCADE 选项的 FOREIGN KEY 约束。 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 | 约束 | 具有 ON UPDATE CASCADE 选项的 FOREIGN KEY 约束。 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) 的任何目录视图中都不能直接显示。 对系统表或数据库文件没有访问权限的用户不能检索模糊文本。 但是,能通过 DAC 端口访问系统表的用户或能够直接访问数据库文件的用户可以使用此文本。 此外,能够向服务器进程附加调试器的用户可在运行时从内存中检索原始过程。 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 约束、DEFAULT 定义、Transact-SQL 函数、Transact-SQL 过程、表、Transact-SQL 触发器、视图 | 指定对象的带引号标识符设置为 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。 Nonnull = 对象所有者的数据库用户 ID。 NULL = 不支持的对象类型,或对象 ID 无效。 基本数据类型:int |
SchemaId | 任何架构范围内的对象 | 与对象关联的架构的 ID。 Nonnull = 对象的架构 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 = 表没有全文检索。 基本数据类型:int |
TableFulltextItemCount | 表 | 适用于:SQL Server 2008 (10.0.x) 及更高版本。 Nonnull = 成功进行全文检索的行数。 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 | 表 | 表的 uniqueidentifier 列具有 ROWGUIDCOL。 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 | 表 | 由于 bcp 或 BULK INSERT 任务,表被锁定。 1 = True 0 = False 基本数据类型:int |
TableIsMemoryOptimized | 表 | 适用于:SQL Server 2014 (12.x) 及更高版本。 表是内存优化表 1 = True 0 = False 基本数据类型:int 有关详细信息,请参阅 内存中 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 有关详细信息,请参阅 使用列集。 |
基数 | 表(系统或用户定义)、视图或索引 | 适用于:SQL Server 2012 (11.x) 及更高版本。 指定对象中的行数。 |
TableTemporalType | 表 | 适用于:SQL Server 2016 (13.x) 及更高版本。 指定表的类型。 0 = 非时态表 1 = 系统版本控制表的历史记录表 2 = 系统版本控制时态表 |
返回类型
sql_variant
例外
出现错误时或调用方没有查看对象的权限时,将返回 NULL。
用户只能查看符合如下条件的安全对象的元数据:该安全对象为该用户所有,或已授予该用户对该安全对象的权限。 也就是说,如果用户对该对象没有任何权限,则某些会产生元数据的内置函数(如 OBJECTPROPERTYEX)可能返回 NULL。 有关详细信息,请参阅 Metadata Visibility Configuration。
注解
数据库引擎 假定 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)。 只要添加了用于索引的第一列后,全文检索即可用于填充。
对元数据可视性的限制将应用于结果集。 有关详细信息,请参阅 Metadata Visibility Configuration。
示例
A. 查找对象的基类型
以下示例为 AdventureWorks2022
数据库中的 MyEmployeeTable
表创建一个 SYNONYM Employee
,然后返回 SYNONYM 的基类型。
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
另请参阅
CREATE SYNONYM (Transact-SQL)
元数据函数 (Transact-SQL)
OBJECT_DEFINITION (Transact-SQL)
OBJECT_ID (Transact-SQL)
OBJECT_NAME (Transact-SQL)
sys.objects (Transact-SQL)
ALTER AUTHORIZATION (Transact-SQL)
TYPEPROPERTY (Transact-SQL)