如何获取SQL Server数据库元数据的方法

时间:2009-01-19 14:00:00 

元数据简介

元数据 (metadata) 最常见的定义为“有关数据的结构数据”,或者再简单一点就是“关于数据的信息”,日常生活中的图例、图书馆目录卡和名片等都可以看作是元数据。在关系型数据库管理系统 (DBMS) 中,元数据描述了数据的结构和意义。比如在管理、维护 SQL Server 或者是开发数据库应用程序的时候,我们经常要获取一些涉及到数据库架构的信息:

◆某个数据库中的表和视图的个数以及名称;

◆某个表或者视图中列的个数以及每一列的名称、数据类型、长度、精度、描述等;

◆某个表上定义的约束;

◆某个表上定义的索引以及主键/外键的信息。

下面我们将介绍几种获取元数据的方法。

获取元数据

使用系统存储过程与系统函数访问元数据

获取元数据最常用的方法是使用 SQL Server 提供的系统存储过程与系统函数。

系统存储过程与系统函数在系统表和元数据之间提供了一个抽象层,使得我们不用直接查询系统表就能获得当前数据库对象的元数据。

常用的与元数据有关的系统存储过程有以下一些:

系统存储过程

◆sp_columns 返回指定表或视图的列的详细信息。

◆sp_databases 返回当前服务器上的所有数据库的基本信息。

◆sp_fkeys 若参数为带有主键的表,则返回包含指向该表的外键的所有表;若参数为带有外键的表名,则返回所有同过主键/外键关系与该外键相关联的所有表。

◆sp_pkeys 返回指定表的主键信息。

◆sp_server_info 返回当前服务器的各种特性及其对应取值。

◆sp_sproc_columns 返回指定存储过程的的输入、输出参数的信息。

◆sp_statistics 返回指定的表或索引视图上的所有索引以及统计的信息。

◆sp_stored_procedures 返回当前数据库的存储过程列表,包含系统存储过程。

◆sp_tables 返回当前数据库的所有表和视图,包含系统表。

常用的与元数据有关的系统函数有以下一些:

系统函数

◆COLUMNPROPERTY 返回有关列或过程参数的信息,如是否允许空值,是否为计算列等。

◆COL_LENGTH 返回指定数据库的指定属性值,如是否处于只读模式等。

◆DATABASEPROPERTYEX 返回指定数据库的指定选项或属性的当前设置,如数据库的状态、恢复模型等。

◆OBJECT_ID 返回指定数据库对象名的标识号

◆OBJECT_NAME 返回指定数据库对象标识号的对象名。

◆OBJECTPROPERTY 返回指定数据库对象标识号的有关信息,如是否为表,是否为约束等。

◆fn_listextendedproperty 返回数据库对象的扩展属性值,如对象描述、格式规则、输入掩码等。

由于我们无法直接利用到存储过程与函数的返回结果,因此只有在我们关心的只是查询的结果,而不需要进一步利用这些结果的时候,我们会使用系统存储过程与系统函数来查询元数据。

例如,如果要获得当前服务器上所有数据库的基本信息,我们可以在查询分析器里面运行:

EXEC sp_databases
GO
 
在返回结果中我们可以看到数据库的名称、大小及备注等信息。

但是如果要引用这部分信息,或者存储这部分信息以供后面使用,那么我们必须借助中间表来完成这个操作:




CREATE TABLE #sp_result
(
DATABASE_NAME sysname,
DATABASE_SIZE int,
REMARKS varchar(254) NULL
)
GO
INSERT INTO #sp_result
EXEC ('sp_databases')
GO


使用信息架构视图访问元数据


标签:SQL,Server,元数据,数据库
0
投稿

猜你喜欢

  • Go语言Elasticsearch数据清理工具思路详解

    2023-08-07 06:29:49
  • centos6.4下python3.6.1安装教程

    2021-11-03 05:44:03
  • ajax+asp无限级分类树型结构

    2011-04-02 11:05:00
  • golang import自定义包方式

    2024-04-25 15:08:55
  • python中加背景音乐如何操作

    2023-11-09 02:54:51
  • tensorflow实现tensor中满足某一条件的数值取出组成新的tensor

    2021-02-18 02:09:22
  • springMVC + easyui + $.ajaxFileUpload实现文件上传注意事项

    2023-09-04 09:17:26
  • conda与jupyter notebook kernel核环境不一致的问题解决

    2021-07-03 15:43:02
  • 浅谈java里的EL表达式在JSP中不能解析的问题

    2023-06-20 11:55:05
  • PHP变量作用域(全局变量&局部变量)&global&static关键字用法实例分析

    2023-11-23 11:42:05
  • 整理Python中常用的conda命令操作

    2022-07-17 16:53:33
  • Django框架的使用教程路由请求响应的方法

    2022-02-08 19:04:55
  • Python流程控制语句的深入讲解

    2023-12-01 00:06:31
  • Windows下Anaconda2安装NLTK教程

    2022-08-11 04:30:49
  • python3.3使用tkinter开发猜数字游戏示例

    2023-09-05 06:53:02
  • Python如何脚本过滤文件中的注释

    2021-10-03 15:24:52
  • django实现模型字段动态choice的操作

    2023-08-13 07:30:31
  • Python学习之字典和集合的使用详解

    2022-11-01 19:54:21
  • SQL SERVER的字段类型介绍

    2008-05-23 13:27:00
  • Python实现备份MySQL数据库的方法示例

    2024-01-27 18:20:04
  • asp之家 网络编程 m.aspxhome.com