访问数据源的架构信息(系统表、信息结构图、GetSchema)

获取元数据的结构信息,主要有三种方法:系统表 、信息结构图、.net的类方法GetSchema。

前两种方法需要编写SQL语句,如果结构不同,访问的方式和语句相差较大,使用不方便。采用DbConnection的GetSchema方法,输入表示架构名称的指定字符串,就可以获取元数据的架构信息。因为SqlConnection、OleDbConnection、OdbcConection、OracleConnection都实现了该虚方法。所以可以获取它们所支持的所有类型的存储结构的元数据,使用方便。

1、.net下各个连接类支持的架构名称参考msdn。使用非常简单。

http://msdn.microsoft.com/zh-cn/library/kcax58fh.aspx

     2、系统表结构参考系统表详细说明。

     3、系统信息结构图参考:http://dev.mysql.com/doc/refman/5.1/zh/information-schema.html

下面是SQL中使用系统表/信息图访问时的简单示例,两者结构不同。

2000下操作:

系统表目录:大部分以dbo.sys为前缀。

系统视图目录:有20个常用的视图,以INFORMATION_SCHEMA为前缀。

在2000中我们可以用这两种方式的查询来得到相同的效果。

如:查询所有数据库:

select name from master..sysdatabases

select  catalog_name   from   INFORMATION_SCHEMA.SCHEMATA

效果一样。

查询用户创建的所有数据库

select * from master..sysdatabases D where sid not in(select sid from master..syslogins where name='sa')

或者

     select dbid, name AS DB_NAME from master..sysdatabases  where sid <> 0x01

     或者

    select name from master..sysdatabases order by name asc

     获取当前数据库中的所有用户表:

select Name from sysobjects where xtype='u' and status>=0

SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE = 'BASE TABLE'

获取某一个表的所有字段

select name from syscolumns where id=object_id('表名')

SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = '表名'

查看与某一个表相关的视图、存储过程、函数

select a.* from sysobjects a, syscomments b where a.id = b.id and b.text like '%表名%'

查看当前数据库中所有存储过程

select name as 存储过程名称 from sysobjects where xtype='P'

查询某一个表的字段和数据类型

select name,xtye from syscolumns where id=object_id('表名')

SELECT COLUMN_NAME,DATA_TYPE FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = '表名'

     2005下操作:

系统表目录:2000中的系统表,在05中都放在了系统视图目录下。

系统视图目录:存放了系统表和视图,增加了许多新的系统表,如支持xml。以sys.为前缀。

 在2005中,系统表仍然属于Master数据库下。但是视图却被分配到了各个数据库下。因此:

select name from master..sysdatabases

select  catalog_name   from   INFORMATION_SCHEMA.SCHEMATA

上面的两种查询就会有不同的结果。

第一个查询仍然可以返回所有的数据库列表。

而第二个查询只返回当前连接的数据库的信息。

除此之外的其他针对具体数据库的操作,跟2000一样。

     由于结构不同,为了保证统一性,我们在对整个服务器操作时,最好使用系统表。而在对某一个具体的数据库操作时,则既可以使用系统表也可以使用信息结构图。

你可能感兴趣的:(schema)