OBJECTPROPERTY 返回有关当前数据库中的模式作用域对象的信息。此函数不能用于不是模式范围的对象,例如数据定义语言(DDL)触发器和事件通知。
OBJECTPROPERTY 语法:
1 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 | 约束 | 具有 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 | 架构范围内的任何对象 | 对象的所有者。
| ||
TableDeleteTrigger | 表 | 表具有 DELETE 触发器。 >1 = 指定类型的第一个触发器的 ID。 | ||
TableDeleteTriggerCount | 表 | 表具有指定数目的 DELETE 触发器。 >0 = DELETE 触发器数目。 | ||
TableFullTextMergeStatus | 表 | 表所具有的全文索引当前是否正在合并。 0 = 表没有全文索引,或者全文索引未在合并。 1 = 全文索引正在合并。 | ||
TableFullTextBackgroundUpdateIndexOn | 表 | 表已启用全文后台更新索引(自动更改跟踪)。 1 = TRUE 0 = FALSE | ||
TableFulltextCatalogId | 表 | 表的全文索引数据所在的全文目录的 ID。 非零 = 全文目录 ID,它与全文索引表中标识行的唯一索引相关。 0 = 表没有全文索引。 | ||
TableFulltextChangeTrackingOn | 表 | 适用于:SQL Server 2008通过SQL Server 2016. 表格启用了全文变更跟踪。 1 = TRUE 0 = FALSE | ||
TableFulltextDocsProcessed | 表 | 适用于:SQL Server 2008通过SQL Server 2016. 自全文索引开始以来处理的行数。在为全文搜索索引的表中,一行的所有列都被视为要编制索引的一个文档的一部分。 0 =没有主动抓取或全文索引完成。 > 0 =以下之一(A或B):A)自完成,增量或手动更改跟踪人口开始以来,通过插入或更新操作处理的文档数。B)启用了具有后台更新索引总体的更改跟踪后由插入或更新操作处理的行数,全文索引架构已更改,重新创建全文目录或重新启动SQL Server实例等。 NULL =表没有全文索引。 | ||
TableFulltextFailCount | 表 | 行数全文搜索没有索引。 0 =人口已经完成。 > 0 =以下(A或B)之一:A)自完全,增量和手动更新开始以来未编入索引的文档数量更改跟踪人口。B)对于具有后台更新索引的变更跟踪,自开始人口以来未编入索引的行数,或者重新启动人口。这可能是由于模式更改,目录重建,服务器重新启动等引起的。 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 | 表 | 表具有用于唯一标识列的ROWGUIDCOL。 1 = True 0 = False | ||
TableHasTextImage | 表 | 表具有 text、ntext 或 image 列。 1 = True 0 = False | ||
TableHasTimestamp | 表 | 表具有一个时间戳列。 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 | ||
TableIsMemoryOptimized | 表 | 表是内存优化 1 = True 0 = False 基本数据类型:int | ||
TableTextInRowLimit | 表 | 行中的文本允许的最大字节数。 如果没有设置行中的文本选项,则为0。 | ||
TableUpdateTrigger | 表 | 表有一个UPDATE触发器。 > 1 =具有指定类型的第一个触发器的ID。 | ||
TableUpdateTriggerCount | 表 | 该表具有指定数量的UPDATE触发器。 > 0 = UPDATE触发器的数量。 | ||
TableHasColumnSet | 表 | 表具有列集。 0 = False 1 = True | ||
TableTemporalType | 表 | 指定表的类型。 0 =非时间表 1 =系统版本表 2的历史表2 =系统版本化的时间表 |
返回类型:
int
例外:
如果调用者没有查看对象的权限,则返回NULL。
用户只能查看用户所拥有的或用户已被授予许可权限的元数据。
这意味着,如果用户对该对象没有任何权限,则元数据发放的内置函数(如OBJECTPROPERTY)可能返回NULL。
备注:
数据库引擎假定object_id在当前数据库上下文中。引用一个查询OBJECT_ID在另一个数据库将返回NULL或不正确的结果。
例如,在以下查询中,当前数据库上下文是主数据库。数据库引擎将尝试返回该数据库中指定的object_id的属性值,而不是返回查询中指定的数据库。
该查询返回不正确的结果,因为视图vEmployee
不在主数据库中。
1 USE master; 2 GO 3 SELECT OBJECTPROPERTY(OBJECT_ID(N'AdventureWorks2012.HumanResources.vEmployee'), 'IsView'); 4 GO
OBJECTPROPERTY(view_id,’IsIndexable’)可能会消耗重要的计算机资源,因为IsIndexable属性的评估需要解析视图定义,规范化和部分优化。
虽然IsIndexable属性标识可以进行索引的表或视图,但是如果不满足某些索引关键要求,索引的实际创建仍然可能会失败。
当添加表的至少一列进行索引时,OBJECTPROPERTY(table_id,’TableHasActiveFulltextIndex’)将返回值为1(true)。
只要添加第一列进行索引,全文索引就会变得活跃。
创建表时,即使在创建表时该选项设置为OFF,QUOTED IDENTIFIER选项始终作为ON存储在表的元数据中。
因此,OBJECTPROPERTY(table_id,’IsQuotedIdentOn’)将始终返回值1(true)。
示例:
1 -- 验证 dbo.Department 是否是一个表 2 IF (OBJECTPROPERTY (OBJECT_ID(N'dbo.Department'),'ISTABLE') = 1) 3 begin 4 select 'Department 是一个表' 5 end 6 ELSE IF (OBJECTPROPERTY (OBJECT_ID(N'dbo.Department'),'ISTABLE') = 0) 7 begin 8 select 'Department 不是一个表' 9 end 10 ELSE IF (OBJECTPROPERTY (OBJECT_ID(N'dbo.Department'),'ISTABLE') IS NULL) 11 begin 12 select 'Department 不是一个有效的对象' 13 end 14 GO
1 -- 验证 自定义 的标量函数 是否 是确定性的 2 SELECT OBJECTPROPERTY(OBJECT_ID('dbo.AvgHeight'), 'IsDeterministic'); --返回 0 表示不确定
1 --使用 SchemaId 属性返回所有者 dbo 的所有对象 2 SELECT name, object_id, type_desc 3 FROM sys.objects 4 WHERE OBJECTPROPERTY(object_id, N'SchemaId') = SCHEMA_ID(N'dbo') 5 ORDER BY type_desc, name;--使用 SchemaId 属性返回所有者 dbo 的所有对象 6 SELECT name, object_id, type_desc 7 FROM sys.objects 8 WHERE OBJECTPROPERTY(object_id, N'SchemaId') = SCHEMA_ID(N'dbo') 9 ORDER BY type_desc, name;
1 -- 验证表 Department 是否 是用户自定义的表 2 IF (OBJECTPROPERTY (OBJECT_ID(N'dbo.Department'),'IsUserTable') = 1) 3 begin 4 SELECT 'Department 是用户自定义的表' 5 end 6 ELSE 7 begin 8 SELECT 'Department 不是用户自定义的表'; 9 end 10 GO
参考:
http://blog.csdn.net/htl258/article/details/5645150
https://docs.microsoft.com/en-us/sql/t-sql/functions/objectproperty-transact-sql