在SQL中可以通过查询Master下的系统表(sys)和系统视图(information_schema)获取数据库的信息。SQL2000和SQL2005的结构略有不同。 系统表结构参考系统表详细说明。 系统信息结构图参考:http://dev./doc/refman/5.1/zh/information-schema.html 1、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 = '表名' 2、2005下操作: 系统表目录:2000中的系统表,在05中都放在了系统视图目录下。 系统视图目录:存放了系统表和视图,增加了许多新的系统表,如支持xml。以sys.为前缀。 在2005中,系统表仍然属于Master数据库下。但是视图却被分配到了各个数据库下。因此: select name from master..sysdatabases select catalog_name from INFORMATION_SCHEMA.SCHEMATA 上面的两种查询就会有不同的结果。 第一个查询仍然可以返回所有的数据库列表。 而第二个查询只返回当前连接的数据库的信息。 除此之外的其他针对具体数据库的操作,跟2000一样。 由于结构不同,为了保证统一性,我们在对整个服务器操作时,最好使用系统表。而在对某一个具体的数据库操作时,则既可以使用系统表也可以使用信息结构图。 |
|