SQL Server OBJECTPROPERTY使用方法
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 |
||
| 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不在主数据库中。
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)。
示例:
-- 验证 dbo.Department 是否是一个表
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'); --返回 0 表示不确定
--使用 SchemaId 属性返回所有者 dbo 的所有对象
SELECT name, object_id, type_desc
FROM sys.objects
WHERE OBJECTPROPERTY(object_id, N'SchemaId') = SCHEMA_ID(N'dbo')
ORDER BY type_desc, name;--使用 SchemaId 属性返回所有者 dbo 的所有对象
SELECT name, object_id, type_desc
FROM sys.objects
WHERE OBJECTPROPERTY(object_id, N'SchemaId') = SCHEMA_ID(N'dbo')
ORDER BY type_desc, name;
-- 验证表 Department 是否 是用户自定义的表
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
SQL Server OBJECTPROPERTY使用方法的更多相关文章
- win8安装SQL Server 2005问题解决方法
win8安装SQL Server 2005问题解决方法 1.正常安装任一版本的SQL Server 2005(最好安装企业版). 2.安装到SqlServer服务的时候提示启动服务失败(提示重试的时候 ...
- SQL Server Profiler使用方法
一.SQL Server Profiler使用方法 1.单击开始--程序--Microsoft SQL Server 2005--性能工具--SQL Server Profiler,如下图: 2. ...
- 远程连接sql server 数据库的方法
今天找了半天,终于解决了如何从本地连接到远程sql server服务器的方法. 1.首先确保打开远程服务器的sql server配置管理器,确保TCP/IP协议开启 2.WebConfig的连接字符格 ...
- SQL Server优化的方法
SQL Server优化的方法<一> 查询速度慢的原因很多,常见如下几种: 1.没有索引或者没有用到索引(这是查询慢最常见的问题,是程序设计的缺陷) 2.I/O吞吐量小,形成了 ...
- mdf, ldf文件导入到sql server 2005的方法
mdf, ldf文件导入到sql server 2005的方法 在实际的工作中, 有很多涉及到数据库资料的备份,转移, 恢复等方面的工作, 但是并不是所有的资料都是以.bak格式存在的, 比如说, 你 ...
- CASE函数 sql server——分组查询(方法和思想) ref和out 一般处理程序结合反射技术统一执行客户端请求 遍历查询结果集,update数据 HBuilder设置APP状态栏
CASE函数 作用: 可以将查询结果集的某一列的字段值进行替换 它可以生成一个新列 相当于switch...case和 if..else 使用语法: case 表达式/字段 when 值 then ...
- SQL Server分页查询方法整理
SQL Server数据库分页查询一直是SQL Server的短板,闲来无事,想出几种方法,假设有表ARTICLE,字段ID.YEAR...(其他省略),数据53210条(客户真实数据,量不大),分页 ...
- 在易语言中调用MS SQL SERVER数据库存储过程方法总结
Microsoft SQL SERVER 数据库存储过程,根据其输入输出数据,笼统的可以分为以下几种情况或其组合:无输入,有一个或多个输入参数,无输出,直接返回(return)一个值,通过output ...
- [转]VS2013自带SQL Server 的启用方法
本文转自:http://www.icharm.me/vs2013%E8%87%AA%E5%B8%A6%E7%9A%84%E6%95%B0%E6%8D%AE%E5%BA%93sql-server-exp ...
随机推荐
- 【BZOJ】1645: [Usaco2007 Open]City Horizon 城市地平线(线段树+特殊的技巧)
http://www.lydsy.com/JudgeOnline/problem.php?id=1645 这题的方法很奇妙啊...一开始我打了一个“离散”后的线段树.............果然爆了. ...
- php和js实现文件拖拽上传
Dropzone.js实现文件拖拽上传 http://www.sucaihuo.com/php/1399.html demo http://www.sucaihuo.com/jquery/13/139 ...
- RabbitMQ之Exchange-4
RabbitMQ消息模型的核心思想是生产者不会将消息直接发送给队列.生产者通常不知道消息将会被哪些消费者接收,按照刚开始里介绍的rabbitMQ中所画的,生产者不是直接将消息发送给Queue么认识会交 ...
- 性能测试工具LoadRunner中进程运行和线程运行区别
loadrunner controller将使用驱动程序mmdrv运行Vuser.用户可以在controller的run-time setting中选择Vuser的运行方式, 是多进程方式or多线程方 ...
- python3----scrapy(笔记)
import scrapy import sys # import io # sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='gb ...
- 剑指 offer set 25 求 1+2+...+n
题目 要求不能使用乘除法, for, while, if else, switch, case 等关键字 思路 1. 循环已经命令禁止, 禁用 if, 意味着递归也不能使用. 但即便如此, 我们仍然要 ...
- Android 蓝牙学习
Android 蓝牙学习 学习缘由 上个礼拜公司要开发个简单的五子棋游戏!其中一个需求就是支持蓝牙对战!所以苦逼的我学习蓝牙方面的知识了! 简介 Bluetooth是目前使用最广泛的无线通讯协议,近距 ...
- 用Java向数据库中插入大量数据时的优化
使用jdbc向数据库插入100000条记录,分别使用statement,PreparedStatement,及PreparedStatement+批处理3种方式进行测试: public void ex ...
- 去掉第一次ssh连接的yes问题
第一次执行的时候,有的机器可能会提醒输入ssh初次登录询问yes/no,如果要去掉这个yes/no的询问环节, 只需要修改本机的/etc/ssh/ssh_config文件中的"# Stric ...
- Java IO 修改文件名
/** *//**文件重命名 * @param path 文件目录 * @param oldname 原来的文件名 * @param newname 新文件名 */ public void renam ...