扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
作者:3946469 来源:赛迪网 2007年8月28日
关键字: SQL Server SQL Server 各版本 元数据 数据库
由于我们无法直接利用到存储过程与函数的返回结果,因此只有在我们关心的只是查询的结果,而不需要进一步利用这些结果的时候,我们会使用系统存储过程与系统函数来查询元数据。
例如,如果要获得当前服务器上所有数据库的基本信息,我们可以在查询分析器里面运行:
|
在返回结果中我们可以看到数据库的名称、大小及备注等信息。
但是如果要引用这部分信息,或者存储这部分信息以供后面使用,那么我们必须借助中间表来完成这个操作:
|
使用信息架构视图访问元数据
信息架构视图基于 SQL-92 标准中针对架构视图的定义,这些视图独立于系统表,提供了关于 SQL Server 元数据的内部视图。信息架构视图的最大优点是,即使我们对系统表进行了重要的修改,应用程序也可以正常地使用这些视图进行访问。因此对于应用程序来说,只要是符合 SQL-92 标准的数据库系统,使用信息架构视图总是可以正常工作的。
信息架构视图
◆INFORMATION_SCHEMA.CHECK_CONSTRAINTS:返回有关列或过程参数的信息,如是否允许空值,是否为计算列等。
◆INFORMATION_SCHEMA.COLUMNS:返回当前数据库中当前用户可以访问的所有列及其基本信息。
◆INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE:返回当前数据库中定义了约束的所有列及其约束名。
◆INFORMATION_SCHEMA.CONSTRAINT_TABLE_USAGE:返回当前数据库中定义了约束的所有表及其约束名。
◆INFORMATION_SCHEMA.KEY_COLUMN_USAGE:返回当前数据库中作为主键/外键约束的所有列。
◆INFORMATION_SCHEMA.SCHEMATA:返回当前用户具有权限的所有数据库及其基本信息。
◆INFORMATION_SCHEMA.TABLES:返回当前用户具有权限的当前数据库中的所有表或者视图及其基本信息。
◆INFORMATION_SCHEMA.VIEWS:返回当前数据库中的当前用户可以访问的视图及其所有者、定义等信息。
由于这些信息架构都是以视图的方式存在的,因此我们可以很方便地获得并利用需要的信息。
例如,我们要得到某个表有多少列,可以使用以下语句:
SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME='mytable'
使用系统表访问元数据
虽然使用系统存储过程、系统函数与信息架构视图已经可以为我们提供了相当丰富的元数据信息,但是对于某些特殊的元数据信息,我们仍然需要直接对系统表进行查询。因为SQL Server 将所有数据库对象的信息均存放在系统表中,作为 SQL Server 的管理、开发人员,了解各个系统表的作用将有助于我们了解 SQL Server 的内在工作原理。
SQL Server 的系统表非常多,其中最常用的与元数据查询有关的表有如下一些:
syscolumns 存储每个表和视图中的每一列的信息以及存储过程中的每个参数的信息。
syscomments 存储包含每个视图、规则、默认值、触发器、CHECK 约束、DEFAULT 约束和存储过程的原始 SQL 文本语句。
sysconstraints 存储当前数据库中每一个约束的基本信息。
sysdatabases 存储当前服务器上每一个数据库的基本信息。
sysindexes 存储当前数据库中的每个索引的信息。
sysobjects 存储数据库内的每个对象(约束、默认值、日志、规则、存储过程等)的基本信息。
sysreferences 存储所有包括 FOREIGN KEY 约束的列。
systypes 存储系统提供的每种数据类型和用户定义数据类型的详细信息。
将系统存储过程、系统函数、信息架构视图与系统表结合使用,可以方便地让我们获得所有需要的元数据信息。
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者