分享

在SQL中可以通过查询Master下的系统表(sys)和系统视图

 nbxming 2010-12-28

在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一样。

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

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多