适用于:SQL Server
Azure SQL 数据库
Azure SQL 托管实例
Azure Synapse Analytics
分析平台系统(PDW)
Microsoft Fabric 中的 SQL 分析终结点
Microsoft Fabric 中的仓库
Microsoft Fabric 预览版中的 SQL 数据库
返回当前数据库中架构范围内的对象的相关信息。 有关架构范围内的对象的列表,请参阅 sys.objects (Transact-SQL)。 不能将此函数用于不属于架构范围内的对象,如数据定义语言 (DDL) 触发器和事件通知。
语法
OBJECTPROPERTY ( ID , property )
参数
ID
表示当前数据库中对象的 ID 的表达式。 ID 为 int ,假定为当前数据库上下文中的架构范围对象。
property
表示要为 ID 指定的对象返回的信息的表达式。 属性 可以是以下值之一。
注意
除非另有说明,NULL否则在属性不是有效的属性名称时返回,ID 不是有效的对象 ID,ID 是指定属性不支持的对象类型,或者调用方无权查看对象的元数据。
| 属性名称 | 对象类型 | 说明和返回的值 |
|---|---|---|
CnstIsClustKey |
约束 |
PRIMARY KEY 包含聚集索引的约束。1 = True 0 = False |
CnstIsColumn |
约束 |
CHECK、 DEFAULT或 FOREIGN KEY 单个列的约束。1 = True 0 = False |
CnstIsDeleteCascade |
约束 |
FOREIGN KEY 具有 ON DELETE CASCADE 选项的约束。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 |
约束 |
FOREIGN KEY 具有 ON UPDATE CASCADE 选项的约束。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。 如果 ANSI NULLS 为 ON,则所有与 NULL 值进行比较的计算结果为 UNKNOWN。 只要表存在,此设置就会应用于表定义中的所有表达式,包括计算列和约束。1 = True 0 = False |
IsCheckCnst |
任何架构范围内的对象 |
CHECK 约束。1 = True 0 = False |
IsConstraint |
任何架构范围内的对象 | 是列或表上的单个列CHECK或DEFAULTFOREIGN 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) 的任何目录视图中都不能直接显示。 对系统表或数据库文件没有访问权限的用户不能检索模糊文本。 但是,可以通过 数据库管理员的诊断连接 访问系统表或直接访问数据库文件的用户可以使用文本。 此外,能够向服务器进程附加调试器的用户可在运行时从内存中检索原始过程。 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 = ON0 = 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。 非 null = 对象所有者的数据库用户 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 |
表 | 表具有 ROWGUIDCOLuniqueidentifier 列。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 有关详细信息,请参阅 In-Memory 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 。 有关详细信息,请参阅 元数据可见性配置。
注解
数据库引擎 假定 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 schema_name(o.schema_id), o.name, o.object_id, o.type_desc
FROM sys.objects AS o
WHERE OBJECTPROPERTY(o.object_id, N'SchemaId') = SCHEMA_ID(N'dbo')
ORDER BY o.type_desc, o.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