获取 SQL Server 2005 中的元数据
从一直在 Oracle 上做工作转到用 SQL Server,有些使用习惯还转不过来,最明显的就是习惯了键盘敲命令,现在得用鼠标双击拖拽窗口,比如以前一个“desc” 命令就可以列出表的结构,现在得鼠标左键右键点选半天才能看到。虽说图形管理界面简单直观易上手,但对我来说,还是喜欢命令行,喜欢脚本操作。
不过喜欢归喜欢,新东西该学还得学,该适应还得适应。从 Oracle 的经验知道,所有的数据库操作都可以用 sql 脚本完成,大到建一个数据库,小到改一个字段的值,sql 无所不能。MS SQL Server 2005 中 SQL Server Management Studio 的出现,其易用性更上一层楼,但对 sql 命令的支持却也是毫不含糊的。上面提到的 desc 功能,可以用如下 sql 语句实现:
SELECT * FROM INFORMATION_SCHEMA.COLUMNS where table_name='表名'
这句话里面的“INFORMATION_SCHEMA.COLUMNS”是个“信息架构视图”,可以获取表的列信息,类似的视图还有INFORMATION_SCHEMA.Tables、INFORMATION_SCHEMA.Views、INFORMATION_SCHEMA.Schema 等等,分别能获取有关表、视图和架构的信息。信息架构视图是 SQL Server 2005 提供的几种获取元数据的方法之一。
获取数据库的元数据信息在基于关系数据库的信息管理系统中是经常用到的功能,在 Oracle 中可以从系统预定义的所谓“字典表”或“字典视图”获取,比如“user_tab_columns”、“user_all_tables”等。上面我们说信息架构视图是 SQL Server 2005 提供的几种获取元数据的方法之一,那肯定还有别的方法,别的方法有哪些呢?
查 MSDN 知,SQL Server 数据库中对象的结构和属性信息由 SQL Server 2005 系统目录提供。SQL Server 2005 系统目录的核心是一个视图集,这些视图显示了描述 SQL Server 实例中的对象的元数据。基于 SQL Server 的应用程序可以使用以下方式访问系统目录中的信息:
目录视图。建议使用这种访问方法。
信息架构视图。
OLE DB 架构行集。
ODBC 目录函数。
系统存储过程和函数。
看,方法还不少呢!这些方法都有自己特定的使用环境和使用方法,比如:微软推荐使用的目录视图,内容最全最有效,DBA 用 SQL Server Management Studio 管理数据库时目录视图肯定是最常用的,而信息架构视图符合 SQL-92 标准,适合在异类数据库系统之间移植的应用;目录视图的名称都是以“sys.”前缀,信息架构视图必须以“INFORMATION_SCHEMA.”前缀等。
目录视图的内容非常多,MSDN 中列出的包括 CLR 程序集目录视图、对象目录视图、数据库和文件目录视图等 16 个。而且视图间还有继承关系,像 sys.objects 是个基本视图,sys.tables、sys.columns 都是派生自 sys.objects 的派生视图。派生视图相比基本视图包含了更多的列,但因为是限制在某一方面的信息,所以行数一般要比基本视图少。另外,我们看到有些资料里获取列名查的是 syscolumns,注意这个“syscolumns”跟“sys.columns”还是有点儿区别的,syscolumns 是 SQL Server 2000 里的系统表,在 SQL Server 2005 里其功能已由 sys.columns 代替,但为保证向后兼容,SQL Server 2005 提供了自动将 SQL Server 2000 系统表映射到系统视图的功能。
了解常用的系统目录表或系统字典,对学好 SQL Server 或 Oracle 这种大型 RDBMS 还是很有必要的,因为从这些表或视图中我们可以看出数据库后台的一些存储逻辑和管理机制,能帮助我们更深刻透彻地理解数据库,同时对提高数据库管理及开发的效率也都大有裨益。
两种不同的 RDBMS 对比学习,把在一种 RDBMS 上已有的经验用于另一种,也许行得通,这是业内的通行做法;也许行不通,对这行不通的要仔细研究其差异,从机制上找到新的解决办法,然后由点及线,及面。所以说,对比学习也是种利用既有经验提高学习效率的好方法。