设为首页 收藏本站
查看: 689|回复: 0

[经验分享] SQL Server OBJECTPROPERTY使用方法

[复制链接]

尚未签到

发表于 2017-12-8 09:38:18 | 显示全部楼层 |阅读模式
  OBJECTPROPERTY 返回有关当前数据库中的模式作用域对象的信息。此函数不能用于不是模式范围的对象,例如数据定义语言(DDL)触发器和事件通知。
  OBJECTPROPERTY 语法:



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

ExecIsAnsiNullsOnTransact-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

ExecIsQuotedIdentOnTransact-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

IsAnsiNullsOnTransact-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 = 不确定

IsEncryptedTransact-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

IsQuotedIdentOnTransact-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

  适用于: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

  表具有 textntextimage 列。
  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不在主数据库中。



USE master;  
GO  
SELECT OBJECTPROPERTY(OBJECT_ID(N'AdventureWorks2012.HumanResources.vEmployee'), 'IsView');  
GO
OBJECTPROPERTY(view_id,'IsIndexable')可能会消耗重要的计算机资源,因为IsIndexable属性的评估需要解析视图定义,规范化和部分优化。
虽然IsIndexable属性标识可以进行索引的表或视图,但是如果不满足某些索引关键要求,索引的实际创建仍然可能会失败。
当添加表的至少一列进行索引时,OBJECTPROPERTY(table_id,'TableHasActiveFulltextIndex')将返回值为1(true)。
只要添加第一列进行索引,全文索引就会变得活跃。
创建表时,即使在创建表时该选项设置为OFF,QUOTED IDENTIFIER选项始终作为ON存储在表的元数据中。
因此,OBJECTPROPERTY(table_id,'IsQuotedIdentOn')将始终返回值1(true)。
示例:




IF (OBJECTPROPERTY (OBJECT_ID(N'dbo.Department'),'ISTABLE') = 1)
begin
     select 'Department 是一个表'
end
ELSE IF (OBJECTPROPERTY (OBJECT_ID(N'dbo.Department'),'ISTABLE') = 0)
begin
     select 'Department 不是一个表'
end
ELSE IF (OBJECTPROPERTY (OBJECT_ID(N'dbo.Department'),'ISTABLE') IS NULL)
begin
     select 'Department 不是一个有效的对象'
end
GO




SELECT OBJECTPROPERTY(OBJECT_ID('dbo.AvgHeight'), 'IsDeterministic');   




SELECT name, object_id, type_desc  
FROM sys.objects   
WHERE OBJECTPROPERTY(object_id, N'SchemaId') = SCHEMA_ID(N'dbo')  
ORDER BY type_desc, name;
SELECT name, object_id, type_desc  
FROM sys.objects   
WHERE OBJECTPROPERTY(object_id, N'SchemaId') = SCHEMA_ID(N'dbo')  
ORDER BY type_desc, name;




IF (OBJECTPROPERTY (OBJECT_ID(N'dbo.Department'),'IsUserTable') = 1)
begin
    SELECT 'Department 是用户自定义的表'  
end
ELSE   
begin
    SELECT 'Department 不是用户自定义的表';  
end
GO
  参考:
  http://blog.csdn.net/htl258/article/details/5645150
  https://docs.microsoft.com/en-us/sql/t-sql/functions/objectproperty-transact-sql

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-422056-1-1.html 上篇帖子: 基于Angular4+ server render(服务端渲染)开发教程 下篇帖子: windows命令行(DOS批处理)添加任务计划
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表