OBJECTPROPERTY用法整理

语法

 
OBJECTPROPERTY ( id , property ) 

参数

id

是表示当前数据库中对象 ID 的表达式。id 的数据类型为 int,并假定为当前数据库上下文中的架构范围内的对象。

property一个表达式,提供 id 指定的对象的返回信息。 property 可以是下列值之一:

注意:

除非另外注明,否则出现以下情况时,将返回 NULL:property 不是有效的属性名称,id 不是有效的对象 ID,

id 不是指定的 property 支持的对象类型,或者调用方无权查看对象元数据。

 

 

 

返回类型
int

异常
出现错误时或调用方没有权限查看对象时,将返回 NULL。

用户只能查看符合如下条件的安全对象的元数据:该安全对象为该用户所有,或已授予该用户对该安全对象的权限。这意味着,如果用户对对象没有任何权限,则元数据生成的内置函数(如 OBJECTPROPERTY)可能返回 NULL。有关详细信息,请参阅元数据可见性配置和元数据可见性故障排除。

备注
数据库引擎假定 object_id 位于当前数据库上下文中。引用另一个数据库中的 object_id 的查询将返回 NULL 或返回不正确的结果。例如,在下面的查询中,当前数据库上下文为 master 数据库。数据库引擎将尽量返回该数据库(而不是在查询中指定的数据库)中指定的 object_id 的属性值。由于视图 vEmployee 不在 master 数据库中,该查询将返回不正确的结果。

  
USE master;
GO
SELECT OBJECTPROPERTY(OBJECT_ID(N'AdventureWorks.HumanResources.vEmployee'), 'IsView');
GO

OBJECTPROPERTY(view_id, 'IsIndexable')可能会耗费大量的计算机资源,这是因为处理 IsIndexable 属性需要分析视图定义、规范化和局部优化。尽管 IsIndexable 属性可以标识出能编制索引的表或视图,但在实际创建索引时,如果不能满足某些索引键要求,创建过程仍然可能会失败。有关详细信息,请参阅 CREATE INDEX (Transact-SQL)。

如果至少添加了一个表列用于索引,则 OBJECTPROPERTY(table_id, 'TableHasActiveFulltextIndex')将返回值 1 (true)。只要添加了用于索引的第一列后,全文索引即可用于填充。

创建表后,表的元数据中 QUOTED IDENTIFIER 选项始终是 ON,即使在创建表时将该选项设置为 OFF。因此,OBJECTPROPERTY(table_id, 'IsQuotedIdentOn')将始终返回值 1 (true)。

示例
A. 验证某个对象是否为表
以下示例将测试 UnitMeasure 是否为 AdventureWorks 数据库中的表。

  
USE AdventureWorks;
GO
IF OBJECTPROPERTY (OBJECT_ID(N'Production.UnitMeasure'),'ISTABLE') = 1
   PRINT 'UnitMeasure is a table.'
ELSE IF OBJECTPROPERTY (OBJECT_ID(N'Production.UnitMeasure'),'ISTABLE') = 0
   PRINT 'UnitMeasure is not a table.'
ELSE IF OBJECTPROPERTY (OBJECT_ID(N'Production.UnitMeasure'),'ISTABLE') IS NULL
   PRINT 'ERROR: UnitMeasure is not a valid object.';
GO
 

B. 验证用户定义的标量值函数是否为确定性函数
以下示例将测试用户定义的标量值函数 ufnGetProductDealerPrice(该函数返回 money)是不是一个确定性函数。

  
USE AdventureWorks;
GO
SELECT OBJECTPROPERTY(OBJECT_ID('dbo.ufnGetProductDealerPrice'), 'IsDeterministic');
GO
 

结果集显示 ufnGetProductDealerPrice 是一个确定性函数。

  
-----
0

C. 查找属于特定架构的对象
以下示例使用 SchemaId 属性返回属于架构 Production 的所有对象。

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


本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/htl258/archive/2010/06/03/5645150.aspx

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值