OBJECTPROPERTYEX (Transact-SQL)
返回当前数据库中架构范围内的对象的有关信息。有关这些对象的列表,请参阅 sys.objects (Transact-SQL)。OBJECTPROPERTYEX 不能用于非架构范围内的对象,如数据定义语言 (DDL) 触发器和事件通知。
语法
OBJECTPROPERTYEX ( id , property )
参数
id
是表示当前数据库中对象 ID 的表达式。id 的数据类型为 int,并假定为当前数据库上下文中的架构范围内的对象。property
一个表达式,包含要为 ID 所指定的对象返回的信息。返回类型为 sql_variant。下表显示了各属性值的基本数据类型。注意 除非另外注明,否则出现以下情况时,将返回 NULL:property 不是有效的属性名称,id 不是有效的对象 ID,id 不是指定的 property 支持的对象类型,或者调用方无权查看对象元数据。
属性名称
对象类型
说明和返回的值
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
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
架构范围内的任何对象
绑定的默认值。
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 的任何目录视图中都不能直接显示。对系统表或数据库文件没有访问权限的用户不能检索模糊文本。但是,能沟通过 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
表
表所具有的全文索引当前是否正在合并。
0 = 表没有全文索引,或者全文索引未在合并。
1 = 全文索引正在合并。
TableFullTextBackgroundUpdateIndexOn
表
表已启用全文后台更新索引(自动更改跟踪)。
1 = TRUE
0 = FALSE
基本数据类型:int
TableFulltextCatalogId
表
表的全文索引数据所在的全文目录的 ID。
非零 = 全文目录 ID,它与全文索引表中标识行的唯一索引相关。
0 = 表没有全文索引。
基本数据类型:int
TableFullTextChangeTrackingOn
表
表已启用全文更改跟踪。
1 = TRUE
0 = FALSE
基本数据类型:int
TableFulltextDocsProcessed
表
自开始全文索引以来所处理的行数。在为进行全文搜索而正在编制索引的表中,将一个行的所有列视为要编制索引的文档的一部分。
0 = 没有完成的活动爬网或全文索引。
> 0 = 以下选项之一:
自从开始完整、增量或手动更改跟踪填充以来,由插入或更新操作处理的文档数。
自从执行以下操作以来由插入或更新操作处理的行数:启用具有后台更新索引填充功能的更改跟踪、更改全文索引架构、重建全文目录或重新启动 SQL Server 的实例等。
NULL = 表没有全文索引。
基本数据类型:int
注意 此属性不监视已删除行,也不对已删除行进行计数。
TableFulltextFailCount
表
全文搜索不索引的行数。
0 = 填充已完成。
> 0 = 以下选项之一:
自从开始完整、增量和手动更新更改跟踪填充以来未编制索引的文档数。
对于具有后台更新索引功能的更改跟踪,则为自从开始填充或重新启动填充以来未编制索引的行数。这可能由架构更改、重新生成目录、服务器重新启动等原因引起。
NULL = 表没有全文索引。
基本数据类型:int
TableFulltextItemCount
表
Nonnull = 成功进行全文索引的行数。
NULL = 表没有全文索引。
基本数据类型:int
TableFulltextKeyColumn
表
与参与全文索引定义的单列唯一索引关联的列的 ID。
0 = 表没有全文索引。
基本数据类型:int
TableFulltextPendingChanges
表
要处理的挂起更改跟踪项的数目。
0 = 未启用更改跟踪。
NULL = 表没有全文索引。
基本数据类型:int
TableFulltextPopulateStatus
表
0 = 空闲。
1 = 正在进行完全填充。
2 = 正在进行增量填充。
3 = 正在传播所跟踪的更改。
4 = 正在进行后台更新索引(例如,自动跟踪更改)。
5 = 全文索引已中止或暂停。
基本数据类型:int
TableHasActiveFulltextIndex
表
表具有活动的全文索引。
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
TableIsPinned
表
驻留表以将其保留在数据缓存中。
0 = False
SQL Server 2005 及更高版本不支持此功能。
TableTextInRowLimit
表
表设置了 text in row 选项。
> 0 = text in row 所允许的最大字节数。
0 = 未设置 text in row 选项。
基本数据类型:int
TableUpdateTrigger
表
表具有 UPDATE 触发器。
>1 = 指定类型的第一个触发器的 ID。
基本数据类型:int
TableUpdateTriggerCount
表
表具有指定数目的 UPDATE 触发器。
> 0 = UPDATE 触发器的个数。
基本数据类型:int
UserDataAccess
函数、视图
指示对象访问 SQL Server 的本地实例中的用户数据和用户表。
1 = 读取
0 = 无
基本数据类型:int
TableHasColumnSet
表
表具有列集。
0 = False
1 = True
有关详细信息,请参阅使用列集。
返回类型
sql_variant
异常
出现错误时或调用方没有查看对象的权限时,将返回 NULL。
用户只能查看符合如下条件的安全对象的元数据:该安全对象为该用户所有,或已授予该用户对该安全对象的权限。也就是说,如果用户对该对象没有任何权限,则某些会产生元数据的内置函数(如 OBJECTPROPERTYEX)可能返回 NULL。有关详细信息,请参阅元数据可见性配置和元数据可见性故障排除。
注释
数据库引擎假定 object_id 位于当前数据库上下文中。引用另一个数据库中的 object_id 的查询将返回 NULL 或返回不正确的结果。例如,在下面的查询中,当前数据库上下文为 master 数据库。数据库引擎将尝试从该数据库而不是查询所指定的数据库中返回指定的 object_id 的属性值。由于视图 vEmployee 不在 master 数据库中,该查询将返回不正确的结果。
USE master;
GO
SELECT OBJECTPROPERTYEX(OBJECT_ID(N'AdventureWorks.HumanResources.vEmployee'), 'IsView');
GO
OBJECTPROPERTY(view_id**,'IsIndexable'**)可能会耗费大量的计算机资源,这是因为处理 IsIndexable 属性需要分析视图定义、规范化和局部优化。尽管 IsIndexable 属性可以标识出能编制索引的表或视图,但在实际创建索引时,如果不能满足某些索引键要求,创建过程仍然可能会失败。有关详细信息,请参阅 CREATE INDEX (Transact-SQL)。
如果至少添加了一个表列用于索引,则 OBJECTPROPERTY(table_id**,'TableHasActiveFulltextIndex'**)将返回值 1 (true)。只要添加了用于索引的第一列后,全文索引即可用于填充。
对元数据可视性的限制将应用于结果集。有关详细信息,请参阅元数据可见性配置。
示例
查找对象的基类型
以下示例为 AdventureWorks 数据库中的 Employee 表创建一个 SYNONYM MyEmployeeTable,然后返回 SYNONYM 的基类型。
USE AdventureWorks;
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 AdventureWorks;
GO
SELECT OBJECTPROPERTYEX(OBJECT_ID(N'HumanResources.Employee'), N'TABLEUPDATETRIGGERCOUNT');
GO
C. 查找具有 FOREIGN KEY 约束的表
以下示例使用 TableHasForeignKey 属性返回具有 FOREIGN KEY 约束的所有表。
USE AdventureWorks;
GO
SELECT name, object_id, schema_id, type_desc
FROM sys.objects
WHERE OBJECTPROPERTYEX(object_id, N'TableHasForeignKey') = 1
ORDER BY name;
GO