前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >使用信息架构视图访问数据库元数据

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

作者头像
张善友
发布2018-01-19 15:18:31
8240
发布2018-01-19 15:18:31
举报
文章被收录于专栏:张善友的专栏

元数据简介

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

  1. 某个数据库中的表和视图的个数以及名称 ;
  2. 某个表或者视图中列的个数以及每一列的名称、数据类型、长度、精度、描述等;
  3. 某个表上定义的约束;
  4. 某个表上定义的索引以及主键/外键的信息。 信息架构视图基于 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

返回当前数据库中的当前用户可以访问的视图及其所有者、定义等信息。

由于这些信息架构都是以视图的方式存在的,因此我们可以很方便地获得并利用需要的信息。 所以很容易的利用数据库元数据信息实现ORM功能,下面是几个常用的SQL

代码语言:js
复制
     //获取表的所有列
      public const string TABLE_COLUMN_SQL = " SELECT     TABLE_CATALOG AS [Database], TABLE_SCHEMA AS Owner, TABLE_NAME AS TableName, COLUMN_NAME AS ColumnName,  " +
                          "ORDINAL_POSITION AS OrdinalPosition, COLUMN_DEFAULT AS DefaultSetting, IS_NULLABLE AS IsNullable, DATA_TYPE AS DataType,  " +
                          "CHARACTER_MAXIMUM_LENGTH AS MaxLength, NUMERIC_PRECISION AS Precision, DATETIME_PRECISION AS DatePrecision " +
                           "FROM         INFORMATION_SCHEMA.COLUMNS " +
                           "WHERE     (TABLE_NAME = @tblName) ";
     //获取表的所有存储过程和参数
      public const string SP_PARAM_SQL="SELECT     SPECIFIC_CATALOG AS [Database], SPECIFIC_SCHEMA AS Owner, SPECIFIC_NAME AS SPName, ORDINAL_POSITION AS OrdinalPosition,  " +
                       "PARAMETER_MODE AS ParamType, IS_RESULT AS IsResult, PARAMETER_NAME AS Name, DATA_TYPE AS DataType,  " +
                       "CHARACTER_MAXIMUM_LENGTH AS DataLength, REPLACE(PARAMETER_NAME, '@', '') AS CleanName " +
                       "FROM         INFORMATION_SCHEMA.PARAMETERS " +
                       "WHERE SPECIFIC_NAME=@spName";
     //获取表的所有存储过程的Sql
      public const string SP_SQL = " SELECT     SPECIFIC_CATALOG AS [Database], SPECIFIC_SCHEMA AS Owner, SPECIFIC_NAME AS Name, ROUTINE_DEFINITION AS SQL, CREATED AS CreatedOn, " +
                          "LAST_ALTERED AS ModifiedOn " +
                          "FROM         INFORMATION_SCHEMA.ROUTINES " +
                           "WHERE     (SPECIFIC_NAME = @spName) ";
     //获取表的所有存储过程 
      public const string TABLE_SQL = "SELECT     TABLE_CATALOG AS [Database], TABLE_SCHEMA AS Owner, TABLE_NAME AS Name, TABLE_TYPE "+
             "FROM         INFORMATION_SCHEMA.TABLES "+
                "WHERE     (TABLE_TYPE = 'BASE TABLE') AND (TABLE_NAME <> N'sysdiagrams') " +
             "AND TABLE_NAME=@tblName";
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2006-10-28 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档