OBJECTPROPERTY (Transact-SQL)

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

主题链接图标Transact-SQL 语法约定

语法

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

    表具有 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

    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'AdventureWorks2008R2.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 是否为 AdventureWorks2008R2 数据库中的表。

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

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

-----

0

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

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

USE AdventureWorks2008R2;
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