OBJECTPROPERTY用法整理

本文介绍如何使用 SQL Server 的 OBJECTPROPERTY 函数查询数据库对象的属性,包括约束、触发器、视图、过程等的特性,如是否为主键、是否加密、是否支持全文索引等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

语法

 
OBJECTPROPERTY ( id , property ) 

参数

id

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

property

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

 

注意:

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

 

 

属性名称 对象类型 说明和返回的值

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

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

架构范围内的任何对象

绑定的默认值。

1 = True

0 = False

IsDefaultCnst

架构范围内的任何对象

DEFAULT 约束。

1 = True

0 = False

IsDeterministic

函数、视图

函数或视图的确定性属性。

1 = 确定

0 = 不确定

IsEncrypted

Transact-SQL 函数、Transact-SQL 过程、表、Transact-SQL 触发器和视图

指示模块语句的原始文本已转换为模糊格式。模糊代码的输出在 SQL Server 2005 的任何目录视图中都不能直接显示。对系统表或数据库文件没有访问权限的用户不能检索模糊文本。但是,能够通过 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

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 为非空值)将始终返回与父对象相同的所有者 ID。

 

 

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

TableDeleteTrigger

表具有 DELETE 触发器。

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

TableDeleteTriggerCount

表具有指定数目的 DELETE 触发器。

>0 = DELETE 触发器数目。

TableFullTextMergeStatus

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

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

1 = 全文索引正在合并。

TableFullTextBackgroundUpdateIndexOn

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

1 = TRUE

0 = FALSE

TableFulltextCatalogId

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

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

0 = 表没有全文索引。

TableFulltextChangeTrackingOn

表已启用全文更改跟踪。

1 = TRUE

0 = FALSE

TableFulltextDocsProcessed

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

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

> 0 = 以下选项之一:

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

NULL = 表没有全文索引。

注意:
此属性不监视已删除行,也不对已删除行进行计数。

 

 

TableFulltextFailCount

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

0 = 填充已完成。

> 0 = 以下选项之一:

  • 自从开始完整、增量和手动更新更改跟踪填充以来未编制索引的文档数。
  • 对于具有后台更新索引功能的更改跟踪,则为自从开始填充或重新启动填充以来未编制索引的行数。这可能由架构更改、目录重建、服务器重新启动等引起。

NULL = 表没有全文索引。

TableFulltextItemCount

成功编制了全文索引的行数。

TableFulltextKeyColumn

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

0 = 表没有全文索引。

TableFulltextPendingChanges

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

0 = 未启用更改跟踪。

NULL = 表没有全文索引。

TableFulltextPopulateStatus

0 = 空闲。

1 = 正在进行完全填充。

2 = 正在进行增量填充。

3 = 正在传播所跟踪的更改。

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

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

TableHasActiveFulltextIndex

表具有活动的全文索引。

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

表具有 textntextimage 列。

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

TableIsPinned

驻留表以将其保留在数据缓存中。

0 = False

SQL Server 2005 及更高版本不支持此功能。

TableTextInRowLimit

text in row 允许的最大字节数。

如果未设置 text in row 选项,则返回 0。

TableUpdateTrigger

表具有 UPDATE 触发器。

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

TableUpdateTriggerCount

表有指定数目的 UPDATE 触发器。

> 0 = UPDATE 触发器的个数。

TableHasColumnSet

表具有列集。

0 = False

1 = True

有关详细信息,请参阅使用列集。

返回类型

int

异常

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

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

备注

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

 
USE master;
GO
SELECT OBJECTPROPERTY(OBJECT_ID(N'AdventureWorks.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 是否为 AdventureWorks 数据库中的表。

 
USE AdventureWorks;
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 AdventureWorks;
GO
SELECT OBJECTPROPERTY(OBJECT_ID('dbo.ufnGetProductDealerPrice'), 'IsDeterministic');
GO

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

 
-----
0

C. 查找属于特定架构的对象

以下示例使用 SchemaId 属性返回属于架构 Production 的所有对象。

 
USE AdventureWorks;
GO
SELECT name, object_id, type_desc
FROM sys.objects 
WHERE OBJECTPROPERTY(object_id, N'SchemaId') = SCHEMA_ID(N'Production')
ORDER BY type_desc, name;
GO
<think>好的,用户想了解或使用Protégé这款本体建模工具,询问使用方法和下载途径。首先需要整理用户提供的引用资料中的相关信息,确保回答准确。 首先,根据引用[3],Protégé是斯坦福大学开发的基于Java的开源工具,用于构建本体,支持类、属性、实例的创建,并屏蔽了底层语言,适合概念层次建模。最新版本是5.5.0,需要Java环境。下载的话应该到官网protege.stanford.edu,这里需要确认链接是否正确,用户可能需要指导如何找到正确的下载页面。 使用教程方面,引用[3]提到有基本教程,用户可能需要步骤说明,比如安装后如何创建类、属性和实例。另外,引用[1]中的实验提到了关系继承、模型建立和推理操作,这些可以作为使用步骤的重点,比如如何定义类之间的关系,使用推理机验证本体。 安装部分,引用[4]提到了项目结构,但用户可能更关心实际安装步骤,比如下载后如何启动,是否需要Maven构建。不过通常官网提供的应该是可执行的jar文件或安装包,所以可能需要说明Java环境配置和直接运行的方法。 用户可能还需要知道Protégé的功能特点,比如支持哪些本体语言(OWL、RDF等),是否支持插件扩展,推理能力等,这些在引用[3]和[1]中都有涉及,比如推理操作能发现隐含关系。 另外,用户可能会遇到的问题,比如安装时Java环境问题,或者建模时的常见错误,可能需要简要提醒。但用户当前问题主要是使用和下载,所以重点放在步骤和资源上。 生成相关问题部分,需要考虑用户可能的后续问题,比如如何定义关系、推理功能的使用、与其他工具的比较,或者实际应用案例,结合引用[2]提到的本体构建方式,手工vs自动,可能也是一个相关问题。 需要确保回答结构清晰,分点说明下载、安装、核心功能、使用步骤,以及参考资料和相关问题。同时注意引用标记,比如提到推理功能时引用[1]和[3]。</think>### Protégé本体建模工具使用与下载指南 --- #### **1. 工具简介** Protégé是由斯坦福大学医学院开发的开源本体建模工具,支持OWL、RDF等语义网标准,广泛应用于知识表示、数据建模和逻辑推理领域[^3]。其核心功能包括: - **类与属性定义**:构建领域概念及其层次关系。 - **实例管理**:为类添加具体实例并关联属性。 - **推理验证**:通过内置推理机(如HermiT)自动推导隐含关系[^1]。 --- #### **2. 下载与安装** **步骤1:环境准备** - 确保系统已安装Java 8或更高版本(Protégé基于Java开发)。 - 访问[Protégé官网](https://protege.stanford.edu/)下载最新版本(当前为5.5.0)。 **步骤2:安装与启动** - Windows/macOS:直接运行下载的可执行文件。 - Linux:解压后通过命令行执行`run.sh`脚本[^4]。 --- #### **3. 核心使用步骤** **(1)创建本体模型** - 打开Protégé,选择“Create New OWL Ontology”。 - 定义命名空间(如`http://example.org/ontology`)。 **(2)构建类与子类** - 在“Classes”标签页中添加领域概念(如`Person`、`Organization`),并通过`SubClass Of`建立继承关系[^1]。 **(3)定义对象属性和数据属性** - 在“Object Properties”中创建关系(如`hasMember`),在“Data Properties”中定义数据类型属性(如`age`)。 **(4)添加实例与关联** - 在“Individuals”标签页中为类创建实例,并通过属性关联实例(如`Alice hasMember CompanyA`)。 **(5)推理与验证** - 点击“Reasoner”菜单选择推理机(如HermiT),执行推理以发现隐含关系。 ```python # 示例:通过Protégé生成的OWL文件片段(伪代码) Class: Person SubClassOf: hasAge only integer ObjectProperty: worksFor Domain: Person Range: Organization ``` --- #### **4. 学习资源推荐** - **官方教程**:官网提供[入门文档](https://protege.stanford.edu/support.php)及视频教程。 - **实战案例**:参考“利用Protégé构建小型本体”的实验步骤。 - **项目结构解析**:了解Protégé目录和配置文件(如`pom.xml`)以深入定制。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值