OBJECT_NAME,schema_name和OBJECT_id
以后的文章全部以sql 2005为例。这篇文章主要介绍三个函数以及2005的几个视图。
--OBJECT_NAME(),schema_name()和OBJECT_id().
--parent_object_id表示父对象的id:对于触发器或约束,该标识号为表 ID
--先看一下sql 2005的几个关于系统对象的视图
select * from sys.all_objects --所有架构范围内的用户定义对象和系统对象的 UNION。
select * from sys.objects --在数据库中创建的每个用户定义的架构范围内的对象在该表中均对应一行
。
select * from sys.sysobjects--在数据库中创建的每个对象(例如约束、默认值、日志、规则以及存储
过程)都对应一行。
select * from sys.system_objects --对于2005 附带的所有架构范围内的系统对象,相应地包含一行。
--所有系统对象都包含在名为 sys 或 INFORMATION_SCHEMA 的架构中。
--看一下all_objects的构成
sp_helptext 'sys.all_objects'
--内容如下
--CREATE VIEW sys.all_objects AS
--SELECT * FROM sys.objects
--UNION ALL
--SELECT * FROM sys.system_objects
--可以看出视图sys.all_objects是用户定义对象sys.objects和系统对象system_objects的合集
--在看看下面的语句
select name
from sys.all_objects
where name not in
(select name from sys.sysobjects)
--执行结果为空,表明两个视图目前是相同的,但是不知道具体的区别.
--现在来看两个函数使用sql 2005 自带数据库
use AdventureWorks
select object_name(parent_object_id),type,* from sys.all_objects
where name='CK_SalesOrderHeader_TaxAmt'
--执行结果:SalesOrderHeaderC
--type=c说明这个对象是一个约束。父对象是SalesOrderHeader
--看一下SalesOrderHeader的架构
select schema_name(schema_id),* from sys.all_objects
where name='SalesOrderHeader'
--结果为sales
--获得sales.SalesOrderHeader的说明
sp_help 'sales.SalesOrderHeader'
--CHECK on column TaxAmtCK_SalesOrderHeader_TaxAmt(n/a)(n/a)Enabled
Is_For_Replication([TaxAmt]>=(0.00))
--可以看到对象CK_SalesOrderHeader_TaxAmt是表SalesOrderHeader的约束。
--列taxamt
--这三个函数介绍到这里