• SQL Server OBJECTPROPERTY使用方法


    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  架构范围内的任何对象

     对象的所有者。

    注意:

    架构所有者不一定是对象所有者。例如,子对象(其 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

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

  • 相关阅读:
    [BZOJ]2959: 长跑
    http状态码 超详细
    mysql注入常用函数
    tomcat7远程代码执行 ImageMagick 命令执行漏洞
    kali安装redis
    反序列化
    CSP 之dvwa
    token防爆破?
    变量覆盖
    安全狗绕过
  • 原文地址:https://www.cnblogs.com/Brambling/p/6702132.html
Copyright © 2020-2023  润新知