• 访问数据源的架构信息(系统表、信息结构图、GetSchema)


    获取元数据的结构信息,主要有三种方法:系统表 、信息结构图、.net的类方法GetSchema。

    前两种方法需要编写SQL语句,如果结构不同,访问的方式和语句相差较大,使用不方便。采用DbConnection的GetSchema方法,输入表示架构名称的指定字符串,就可以获取元数据的架构信息。因为SqlConnection、OleDbConnection、OdbcConection、OracleConnection都实现了该虚方法。所以可以获取它们所支持的所有类型的存储结构的元数据,使用方便。

    1、.net下各个连接类支持的架构名称参考msdn。使用非常简单。

    http://msdn.microsoft.com/zh-cn/library/kcax58fh.aspx

         2、系统表结构参考系统表详细说明。

         3、系统信息结构图参考:http://dev.mysql.com/doc/refman/5.1/zh/information-schema.html

    下面是SQL中使用系统表/信息图访问时的简单示例,两者结构不同。

    2000下操作:

    系统表目录:大部分以dbo.sys为前缀。

    系统视图目录:有20个常用的视图,以INFORMATION_SCHEMA为前缀。

    在2000中我们可以用这两种方式的查询来得到相同的效果。

    如:查询所有数据库:

    select name from master..sysdatabases

    select  catalog_name   from   INFORMATION_SCHEMA.SCHEMATA

    效果一样。

    查询用户创建的所有数据库

    select * from master..sysdatabases D where sid not in(select sid from master..syslogins where name='sa')

    或者

         select dbid, name AS DB_NAME from master..sysdatabases  where sid <> 0x01

         或者

        select name from master..sysdatabases order by name asc

         获取当前数据库中的所有用户表:

    select Name from sysobjects where xtype='u' and status>=0

    SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE = 'BASE TABLE'

    获取某一个表的所有字段

    select name from syscolumns where id=object_id('表名')

    SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = '表名'

    查看与某一个表相关的视图、存储过程、函数

    select a.* from sysobjects a, syscomments b where a.id = b.id and b.text like '%表名%'

    查看当前数据库中所有存储过程

    select name as 存储过程名称 from sysobjects where xtype='P'

    查询某一个表的字段和数据类型

    select name,xtye from syscolumns where id=object_id('表名')

    SELECT COLUMN_NAME,DATA_TYPE FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = '表名'

         2005下操作:

    系统表目录:2000中的系统表,在05中都放在了系统视图目录下。

    系统视图目录:存放了系统表和视图,增加了许多新的系统表,如支持xml。以sys.为前缀。

     在2005中,系统表仍然属于Master数据库下。但是视图却被分配到了各个数据库下。因此:

    select name from master..sysdatabases

    select  catalog_name   from   INFORMATION_SCHEMA.SCHEMATA

    上面的两种查询就会有不同的结果。

    第一个查询仍然可以返回所有的数据库列表。

    而第二个查询只返回当前连接的数据库的信息。

    除此之外的其他针对具体数据库的操作,跟2000一样。

         由于结构不同,为了保证统一性,我们在对整个服务器操作时,最好使用系统表。而在对某一个具体的数据库操作时,则既可以使用系统表也可以使用信息结构图。

  • 相关阅读:
    nginx 配置https详细步骤
    Git 上传本地仓库到远程git仓库
    VUE 配置vscode关于vue插件
    ORA-01439:要更改数据类型,则要修改的列必须为空
    Oracle查看主键、删除主键、添加联合主键
    std::stoi, std::stol, std::stoll
    C+++string类如何判断字符串为空
    1day漏洞反推技巧实战(1)
    java反射笔记,自用
    tomcat Valve内存马
  • 原文地址:https://www.cnblogs.com/jyz/p/1301224.html
Copyright © 2020-2023  润新知