专栏首页张善友的专栏使用信息架构视图访问数据库元数据

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

元数据简介

元数据 (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

     //获取表的所有列
      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";

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • iFolder Novell开源文件服务器

         iFolder 是Novell自己开发出的一套软件.将文件存放于iFolder服务器中,而不存放在Windows的工作站. 客户端可以使用下面两种方法...

    张善友
  • 使用RestSharp 库消费Restful Service

    现在互联网上的服务接口都是Restful的,SOAP的Service已经不是主流。.NET/Mono下如何消费Restful Service呢,再也没有了方便的...

    张善友
  • Contact Manager Web API 示例[4] 异常处理(Exception Handling)

    联系人管理器web API是一个Asp.net web api示例程序,演示了通过ASP.NET Web API 公开联系信息,并允许您添加和删除联系人,示例地...

    张善友
  • 热点 | 六月Github热点项目库总结

    磐创AI
  • 微服务中的短信服务如何设计?

    发送短信功能,在开发过程中是最常见的需求。用户登录验证码的发送,活动促销短信的发送等。本Chat将带领你深入的去学习如何设计和实现一个通用的基础短信服务,采用S...

    南风
  • 常用的模型集成方法介绍:bagging、boosting 、stacking

    本文介绍了集成学习的各种概念,并给出了一些必要的关键信息,以便读者能很好地理解和使用相关方法,并且能够在有需要的时候设计出合适的解决方案。

    小草AI
  • Linux/Windows等系统无线网卡无法使用时利用手机共享网络救急

    例如Ubuntu和Windows系统初装后,有时无线驱动会有一些问题,现在wifi普及,网线上网又不是十分方便,需要快速使用网络,通常只要有一个android/...

    zhangrelay
  • 常用的模型集成方法介绍:bagging、boosting 、stacking

    本文介绍了集成学习的各种概念,并给出了一些必要的关键信息,以便读者能很好地理解和使用相关方法,并且能在有需要的时候设计出合适的解决方案。

    磐创AI
  • 常用的模型集成方法介绍:bagging、boosting 、stacking

    本文介绍了集成学习的各种概念,并给出了一些必要的关键信息,以便读者能很好地理解和使用相关方法,并且能够在有需要的时候设计出合适的解决方案。

    机器之心
  • 使用Docker搭建Anaconda Python3.6的练习环境

    版权声明:博客文章都是作者辛苦整理的,转载请注明出处,谢谢! https://blog.csdn....

    Tyan

扫码关注云+社区

领取腾讯云代金券