OBJECTPROPERTY (Transact-SQL)

适用于:SQL ServerAzure SQL 数据库Azure SQL 托管实例Azure Synapse AnalyticsAnalytics Platform System (PDW)Microsoft Fabric 中的 SQL 分析终结点Microsoft Fabric 中的仓库

返回当前数据库中架构范围内的对象的相关信息。 有关架构范围内的对象的列表,请参阅 sys.objects (Transact-SQL)。 不能将此函数用于不属于架构范围内的对象,如数据定义语言 (DDL) 触发器和事件通知。

Transact-SQL 语法约定

语法

OBJECTPROPERTY ( id , property )   

注意

若要查看 SQL Server 2014 (12.x) 及更早版本的 Transact-SQL 语法,请参阅早期版本文档

参数

id
是表示当前数据库中对象 ID 的表达式。 id 的数据类型为 int,并假定为当前数据库上下文中的架构范围内的对象

property
一个表达式,提供 id 指定的对象的返回信息。property 可以是下列值之一

注意

除非另外注明,否则出现以下情况时将返回 NULL:property 不是有效的属性名称;id 不是有效的对象 ID;id 不是指定属性支持的对象类型;调用方无权查看对象的元数据

属性名称 对象类型 说明和返回的值
CnstIsClustKey 约束 具有聚集索引的 PRIMARY KEY 约束。

1 = True

0 = False
CnstIsColumn 约束 单个列上的 CHECK、DEFAULT 或 FOREIGN KEY 约束。

1 = True

0 = False
CnstIsDeleteCascade 约束 具有 ON DELETE CASCADE 选项的 FOREIGN KEY 约束。

1 = True

0 = False
CnstIsDisabled 约束 禁用的约束。

1 = True

0 = False
CnstIsNonclustKey 约束 具有非聚集索引的 PRIMARY KEY 或 UNIQUE 约束。

1 = True

0 = False
CnstIsNotRepl 约束 约束是使用 NOT FOR REPLICATION 关键字定义的。

1 = True

0 = False
CnstIsNotTrusted 约束 启用约束时未检查现有行,因此可能不是所有行都适用该约束。

1 = True

0 = False
CnstIsUpdateCascade 约束 具有 ON UPDATE CASCADE 选项的 FOREIGN KEY 约束。

1 = True

0 = False
ExecIsAfterTrigger 触发器 AFTER 触发器。

1 = True

0 = False
ExecIsAnsiNullsOn Transact-SQL 函数、Transact-SQL 过程、Transact-SQL 触发器、视图 创建时的 ANSI_NULLS 设置。

1 = True

0 = False
ExecIsDeleteTrigger 触发器 DELETE 触发器。

1 = True

0 = False
ExecIsFirstDeleteTrigger 触发器 对表执行 DELETE 时触发的第一个触发器。

1 = True

0 = False
ExecIsFirstInsertTrigger 触发器 对表执行 INSERT 时触发的第一个触发器。

1 = True

0 = False
ExecIsFirstUpdateTrigger 触发器 对表执行 UPDATE 时触发的第一个触发器。

1 = True

0 = False
ExecIsInsertTrigger 触发器 INSERT 触发器。

1 = True

0 = False
ExecIsInsteadOfTrigger 触发器 INSTEAD OF 触发器。

1 = True

0 = False
ExecIsLastDeleteTrigger 触发器 对表执行 DELETE 时触发的最后一个触发器。

1 = True

0 = False
ExecIsLastInsertTrigger 触发器 对表执行 INSERT 时触发的最后一个触发器。

1 = True

0 = False
ExecIsLastUpdateTrigger 触发器 对表执行 UPDATE 时触发的最后一个触发器。

1 = True

0 = False
ExecIsQuotedIdentOn Transact-SQL 函数、Transact-SQL 过程、Transact-SQL 触发器、视图 创建时的 QUOTED_IDENTIFIER 设置。

1 = True

0 = False
ExecIsStartup 过程 启动过程。

1 = True

0 = False
ExecIsTriggerDisabled 触发器 禁用的触发器。

1 = True

0 = False
ExecIsTriggerNotForRepl 触发器 定义为 NOT FOR REPLICATION 的触发器。

1 = True

0 = False
ExecIsUpdateTrigger 触发器 UPDATE 触发器。

1 = True

0 = False
ExecIsWithNativeCompilation Transact-SQL 过程 适用于:SQL Server 2014 (12.x) 及更高版本。

本机编译过程。

1 = True

0 = False

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

1 = True

0 = False
HasDeleteTrigger 表、视图 表或视图具有 DELETE 触发器。

1 = True

0 = False
HasInsertTrigger 表、视图 表或视图具有 INSERT 触发器。

1 = True

0 = False
HasInsteadOfTrigger 表、视图 表或视图具有 INSTEAD OF 触发器。

1 = True

0 = False
HasUpdateTrigger 表、视图 表或视图具有 UPDATE 触发器。

1 = True

0 = False
IsAnsiNullsOn Transact-SQL 函数、Transact-SQL 过程、表、Transact-SQL 触发器、视图 指定表的 ANSI NULLS 选项设置为 ON。 这表示所有对空值的比较都取值为 UNKNOWN。 只要表存在,此设置就会应用于表定义中的所有表达式,包括计算列和约束。

1 = True

0 = False
IsCheckCnst 任何架构范围内的对象 CHECK 约束。

1 = True

0 = False
IsConstraint 任何架构范围内的对象 列或表的单列 CHECK、DEFAULT 或 FOREIGN KEY 约束。

1 = True

0 = False
IsDefault 任何架构范围内的对象 适用于:SQL Server 2008 (10.0.x) 及更高版本。

绑定的默认值。

1 = True

0 = False
IsDefaultCnst 任何架构范围内的对象 DEFAULT 约束。

1 = True

0 = False
IsDeterministic 函数、视图 函数或视图的确定性属性。

1 = 确定

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

1 = 已加密

0 = 未加密

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

1 = True

0 = False
IsExtendedProc 任何架构范围内的对象 扩展过程。

1 = True

0 = False
IsForeignKey 任何架构范围内的对象 FOREIGN KEY 约束。

1 = True

0 = False
IsIndexed 表、视图 包含索引的表或视图。

1 = True

0 = False
IsIndexable 表、视图 可创建索引的表或视图。

1 = True

0 = False
IsInlineFunction 函数 内联函数。

1 = 内联函数

0 = 非内联函数
IsMSShipped 任何架构范围内的对象 安装 SQL Server 过程中创建的对象。

1 = True

0 = False
IsPrimaryKey 任何架构范围内的对象 PRIMARY KEY 约束。

1 = True

0 = False

NULL = 非函数,或对象 ID 无效。
IsProcedure 任何架构范围内的对象 过程。

1 = True

0 = False
IsQuotedIdentOn Transact-SQL 函数、Transact-SQL 过程、表、Transact-SQL 触发器、视图、CHECK 约束、DEFAULT 定义 指定对象的引号标识符设置为 ON。 这表示用英文双引号分隔对象定义中涉及的所有表达式中的标识符。

1 = ON

0 = OFF
IsQueue 任何架构范围内的对象 Service Broker 队列

1 = True

0 = False
IsReplProc 任何架构范围内的对象 复制过程。

1 = True

0 = False
IsRule 任何架构范围内的对象 绑定规则。

1 = True

0 = False
IsScalarFunction 函数 标量值函数。

1 = 标量值函数

0 = 非标量值函数
IsSchemaBound 函数、视图 使用 SCHEMABINDING 创建的绑定到架构的函数或视图。

1 = 绑定到架构

0 = 不绑定到架构。
IsSystemTable 系统表。

1 = True

0 = False
IsSystemVerified Object SQL Server 可以验证对象的确定性和精度属性。

1 = True

0 = False
IsTable 表。

1 = True

0 = False
IsTableFunction 函数 表值函数。

1 = 表值函数

0 = 非表值函数
IsTrigger 任何架构范围内的对象 触发器。

1 = True

0 = False
IsUniqueCnst 任何架构范围内的对象 UNIQUE 约束。

1 = True

0 = False
IsUserTable 用户定义的表。

1 = True

0 = False
IsView 视图 视图。

1 = True

0 = False
OwnerId 任何架构范围内的对象 对象的所有者。

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

Nonnull = 对象所有者的数据库用户 ID。
SchemaId 任何架构范围内的对象 对象所属架构的架构 ID。
TableDeleteTrigger 表具有 DELETE 触发器。

>1 = 指定类型的第一个触发器的 ID。
TableDeleteTriggerCount 表具有指定数目的 DELETE 触发器。

>0 = DELETE 触发器数目。
TableFullTextMergeStatus 适用于:SQL Server 2008 (10.0.x) 及更高版本。

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

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

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

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

1 = TRUE

0 = FALSE
TableFulltextCatalogId 适用于:SQL Server 2008 (10.0.x) 及更高版本。

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

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

0 = 表没有全文检索。
TableFulltextChangeTrackingOn 适用于:SQL Server 2008 (10.0.x) 及更高版本。

表已启用全文更改跟踪。

1 = TRUE

0 = FALSE
TableFulltextDocsProcessed 适用于:SQL Server 2008 (10.0.x) 及更高版本。

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

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

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

NULL = 表没有全文索引。

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

全文搜索未编制索引的行数。

0 = 填充已完成。

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

NULL = 表没有全文索引。
TableFulltextItemCount 适用于:SQL Server 2008 (10.0.x) 及更高版本。

成功编制了全文索引的行数。
TableFulltextKeyColumn 适用于:SQL Server 2008 (10.0.x) 及更高版本。

与参与全文索引定义的单列唯一索引关联的列的 ID。

0 = 表没有全文检索。
TableFulltextPendingChanges 适用于:SQL Server 2008 (10.0.x) 及更高版本。

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

0 = 不启用更改跟踪。

NULL = 表没有全文索引。
TableFulltextPopulateStatus 适用于:SQL Server 2008 (10.0.x) 及更高版本。

0 = 空闲。

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

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

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

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

5 = 全文索引已中止或暂停。
TableHasActiveFulltextIndex 适用于:SQL Server 2008 (10.0.x) 及更高版本。

表具有活动全文检索。

1 = True

0 = False
TableHasCheckCnst 表具有 CHECK 约束。

1 = True

0 = False
TableHasClustIndex 表具有聚集索引。

1 = True

0 = False
TableHasDefaultCnst 表具有 DEFAULT 约束。

1 = True

0 = False
TableHasDeleteTrigger 表具有 DELETE 触发器。

1 = True

0 = False
TableHasForeignKey 表具有 FOREIGN KEY 约束。

1 = True

0 = False
TableHasForeignRef 表由 FOREIGN KEY 约束引用。

1 = True

0 = False
TableHasIdentity 表具有标识列。

1 = True

0 = False
TableHasIndex 表具有任意类型的索引。

1 = True

0 = False
TableHasInsertTrigger 对象具有 INSERT 触发器。

1 = True

0 = False
TableHasNonclustIndex 表具有非聚集索引。

1 = True

0 = False
TableHasPrimaryKey 表具有主键。

1 = True

0 = False
TableHasRowGuidCol 表的 uniqueidentifier 列具有 ROWGUIDCOL

1 = True

0 = False
TableHasTextImage 表具有 text、ntext 或 image 列

1 = True

0 = False
TableHasTimestamp 表具有 timestamp 列

1 = True

0 = False
TableHasUniqueCnst 表具有 UNIQUE 约束。

1 = True

0 = False
TableHasUpdateTrigger 对象具有 UPDATE 触发器。

1 = True

0 = False
TableHasVarDecimalStorageFormat 为 vardecimal 存储格式启用了表

1 = True

0 = False
TableInsertTrigger 表具有 INSERT 触发器。

> 1 = 指定类型的第一个触发器的 ID。
TableInsertTriggerCount 表具有指定数目的 INSERT 触发器。

>0 = INSERT 触发器的数目。
TableIsFake 表不是真实的表。 它将由SQL Server 数据库引擎根据需要在内部进行具体化。

1 = True

0 = False
TableIsLockedOnBulkLoad 因 bcp 或 BULK INSERT 作业而导致表被锁定

1 = True

0 = False
TableIsMemoryOptimized 适用于:SQL Server 2014 (12.x) 及更高版本。

表是内存优化表

1 = True

0 = False

基本数据类型:int

有关详细信息,请参阅 内存中 OLTP(内存中优化)
TableIsPinned 驻留表以将其保留在数据缓存中。

0 = False

SQL Server 2005 (9.x) 及更高版本不支持此功能。
TableTextInRowLimit text in row 允许的最大字节数。

如果未设置 text in row 选项,则返回 0。
TableUpdateTrigger 表具有 UPDATE 触发器。

> 1 = 指定类型的第一个触发器的 ID。
TableUpdateTriggerCount 表具有指定数目的 UPDATE 触发器。

> 0 = UPDATE 触发器数目。
TableHasColumnSet 表具有列集。

0 = False

1 = True

有关详细信息,请参阅 使用列集
TableTemporalType 适用于:SQL Server 2016 (13.x) 及更高版本。

指定表的类型。

0 = 非时态表

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

2 = 系统版本控制时态表

返回类型

int

例外

出现错误时或调用方没有查看对象的权限时,将返回 NULL。

权限

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

注解

数据库引擎 假定 object_id 位于当前数据库上下文中。 引用另一个数据库中的 object_id 的查询将返回 NULL 或返回不正确的结果。 例如,在下面的查询中,当前数据库上下文为 master 数据库。 数据库引擎将尽量返回该数据库(而不是在查询中指定的数据库)中指定的 object_id 的属性值。 由于 vEmployee 视图不在 master 数据库中,该查询将返回不正确的结果。

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

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

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

创建表后,QUOTED IDENTIFIER 选项在表的元数据中始终存储为 ON,即使在创建表时将该选项设置为 OFF 也不例外。 因此,OBJECTPROPERTY(table_id, 'IsQuotedIdentOn') 将始终返回值 1 (true)

示例

A. 验证某个对象是否为表

以下示例将测试 UnitMeasure 是否为 AdventureWorks2022 数据库中的表。

USE AdventureWorks2022;  
GO  
IF OBJECTPROPERTY (OBJECT_ID(N'Production.UnitMeasure'),'ISTABLE') = 1  
   PRINT 'UnitMeasure is a table.'  
ELSE IF OBJECTPROPERTY (OBJECT_ID(N'Production.UnitMeasure'),'ISTABLE') = 0  
   PRINT 'UnitMeasure is not a table.'  
ELSE IF OBJECTPROPERTY (OBJECT_ID(N'Production.UnitMeasure'),'ISTABLE') IS NULL  
   PRINT 'ERROR: UnitMeasure is not a valid object.';  
GO  

B. 验证用户定义的标量值函数是否为确定性函数

以下示例将测试用户定义的标量值函数 ufnGetProductDealerPrice(该函数返回 money 值)是不是一个确定性函数

USE AdventureWorks2022;  
GO  
SELECT OBJECTPROPERTY(OBJECT_ID('dbo.ufnGetProductDealerPrice'), 'IsDeterministic');  
GO  

结果集显示 ufnGetProductDealerPrice 是一个确定性函数。

-----  
0

C. 查找属于特定架构的表

下面的示例返回 dbo 架构中的所有表。

-- Uses AdventureWorks  
  
SELECT name, object_id, type_desc  
FROM sys.objects   
WHERE OBJECTPROPERTY(object_id, N'SchemaId') = SCHEMA_ID(N'dbo')  
ORDER BY type_desc, name;  
GO  

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

D. 验证某个对象是否为表

以下示例将测试 dbo.DimReseller 是否为 AdventureWorksPDW2022 数据库中的表。

-- Uses AdventureWorks  
  
IF OBJECTPROPERTY (OBJECT_ID(N'dbo.DimReseller'),'ISTABLE') = 1  
   SELECT 'DimReseller is a table.'  
ELSE   
   SELECT 'DimReseller is not a table.';  
GO  

另请参阅

COLUMNPROPERTY (Transact-SQL)
元数据函数 (Transact-SQL)
OBJECTPROPERTYEX (Transact-SQL)
ALTER AUTHORIZATION (Transact-SQL)
TYPEPROPERTY (Transact-SQL)
sys.objects (Transact-SQL)