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 ...
随机推荐
- TortoiseGit 提交代码每次需要输入用户名和密码?
每次用TortoiseGit Pull或者Push的时候都会弹出让输入用户名.密码的框, 很麻烦 ,解决办法如下: 解决办法如下: Right click → TortoiseGit → Settin ...
- 【Debian】ftp安装
http://www.2cto.com/os/201107/98311.html http://jingyan.baidu.com/article/adc815133476bdf723bf7393.h ...
- Window发声函数Beep、MessageBeep
C++ Code 1234567891011 WINBASEAPI BOOL WINAPI Beep(__in DWORD dwFreq, __in DWORD dwDuration ...
- python入门(十):XML和JSON解析
一.python解析XML 1.xml.dom.*模块,它是W3C DOM API的实现,若需要处理DOM API则该模块很适合,注意xml.dom包里面有许多模块,须区分它们间的不同: 2.xml. ...
- 自己实现一个Promise库
源码地址 先看基本使用 const promise = new Promise((resolve, reject) => { resolve(value) // or reject(reason ...
- ubuntu安装mysql-python
1.首先你要确定ubuntu更新源能用.以下的源适合13.X和14.X,低版本号的ubuntu没试过.毕竟劳资不是測试人员. 为了安全起见 cp /etc/apt/source.list /etc/a ...
- POJ 3468 A Simple Problem with Integers(线段树功能:区间加减区间求和)
题目链接:http://poj.org/problem?id=3468 A Simple Problem with Integers Time Limit: 5000MS Memory Limit ...
- 剑指 offer set 25 求 1+2+...+n
题目 要求不能使用乘除法, for, while, if else, switch, case 等关键字 思路 1. 循环已经命令禁止, 禁用 if, 意味着递归也不能使用. 但即便如此, 我们仍然要 ...
- 【BZOJ5083】普及 单调栈+二分+RMQ
[BZOJ5083]普及 Description 有一个长度为n的字符串,每一位只会是p或j.你需要取出一个子串S(从左到右或从右到左一个一个取出),使得 不管是从左往右还是从右往左取,都保证每时每刻 ...
- vue+node+mongoDB 火车票H5(五)---城市选择
选择城市,支持搜索,储存选择过城市的历史记录,点击索引能跳到相应位置 1. 父子组件传值,trainCity城市选择组件,选择城市后改变父组件的值 2. 把城市数组按照字母A到Z排序 3.点击字母索引 ...