• SQLServer中获取所有数据库名、所有表名、所有字段名的SQL语句


    ----1. 获取所有的数据库名-----
    SELECT NAME FROM MASTER.DBO.SYSDATABASES ORDER BY NAME
    
    -----2. 获取所有的表名------
    SELECT NAME FROM SYSOBJECTS WHERE XTYPE='U' ORDER BY NAME
    --XTYPE='U':表示所有用户表;
    --XTYPE='S':表示所有系统表;
    SELECT NAME FROM SYSOBJECTS WHERE TYPE = 'U' AND SYSSTAT = '83'
    ----注意:一般情况只需要TYPE = 'U',但有时候会有系统表混在其中(不知道什么原因),加上后面一句后就能删除这些系统表了。
    
    ----3.获取所有字段名-----
    SELECT NAME FROM SYSCOLUMNS WHERE ID=OBJECT_ID('BCUSTOMER');
    
    SELECT SYSCOLUMNS.NAME,SYSTYPES.NAME,SYSCOLUMNS.ISNULLABLE,SYSCOLUMNS.LENGTHFROM SYSCOLUMNS, SYSTYPES 
    WHERE SYSCOLUMNS.XUSERTYPE = SYSTYPES.XUSERTYPE AND SYSCOLUMNS.ID = OBJECT_ID('BCUSTOMER');
    
    /*注意点:
    ----(A)这里为了重点突出某些重要内容,选取了其中几项信息输出。
    (B)SYSCOLUMNS表中只含有数据类型编号,要获取完整的名字需要从SYSTYPES表中找,一般用户使用的数据类型用XUSERTYPE对应比较好,不会出现一对多的情况。
    (C)SYSCOLUMNS.LENGTH得到的是物理内存的长度,所以NVARCHAR和VARCHAR等类型在数据库中的显示是这个的一半。*/
    
    
    ----4、得到表中主键所包含的列名------
    SELECT SYSCOLUMNS.NAME ,SYSOBJECTS.XTYPE
    FROM SYSCOLUMNS,SYSOBJECTS,SYSINDEXES,SYSINDEXKEYS
    WHERE SYSCOLUMNS.ID = OBJECT_ID('BCUSTOMER') 
    AND SYSOBJECTS.XTYPE = 'PK' 
    AND SYSOBJECTS.PARENT_OBJ = SYSCOLUMNS.ID 
    AND SYSINDEXES.ID = SYSCOLUMNS.ID 
    AND SYSOBJECTS.NAME = SYSINDEXES.NAME 
    AND SYSINDEXKEYS.ID = SYSCOLUMNS.ID 
    AND SYSINDEXKEYS.INDID = SYSINDEXES.INDID 
    AND SYSCOLUMNS.COLID = SYSINDEXKEYS.COLID;
    /*注意:这是在4张系统表中寻找的,关系比较复杂,大致可以表示为: 
    SYSCOLUMNS中存有表中的列信息和表ID,
    SYSOBJECTS表中存有主键名字(即PK_TABLE类似)和表ID,
    SYSINDEXES中存有主键名字和表ID和INDEX编号,
    SYSINDEXKEYS中存有表ID和INDEX编号和列编号,
    一项一项对应起来后就能找到列名了,呼~*/
    
    ----5、得到表中列的描述内容-----
    '表示没有找到'
    
    SELECT A.NAME,G.VALUE 
    FROM SYSCOLUMNS AS A 
    LEFT JOIN SYSPROPERTIES G   
    ON A.ID=G.ID 
    AND A.COLID = G.SMALLID   
     WHERE A.ID='BCUSTOMER'
    

      

    ----1. 获取所有的数据库名-----
    SELECT NAME FROM MASTER.DBO.SYSDATABASES ORDER BY NAME

    -----2. 获取所有的表名------
    SELECT NAME FROM SYSOBJECTS WHERE XTYPE='U' ORDER BY NAME
    --XTYPE='U':表示所有用户表;
    --XTYPE='S':表示所有系统表;
    SELECT NAME FROM SYSOBJECTS WHERE TYPE = 'U' AND SYSSTAT = '83'
    ----注意:一般情况只需要TYPE = 'U',但有时候会有系统表混在其中(不知道什么原因),加上后面一句后就能删除这些系统表了。

    ----3.获取所有字段名-----
    SELECT NAME FROM SYSCOLUMNS WHERE ID=OBJECT_ID('BCUSTOMER');

    SELECT SYSCOLUMNS.NAME,SYSTYPES.NAME,SYSCOLUMNS.ISNULLABLE,SYSCOLUMNS.LENGTHFROM SYSCOLUMNS, SYSTYPES
    WHERE SYSCOLUMNS.XUSERTYPE = SYSTYPES.XUSERTYPE AND SYSCOLUMNS.ID = OBJECT_ID('BCUSTOMER');

    /*注意点:
    ----(A)这里为了重点突出某些重要内容,选取了其中几项信息输出。
    (B)SYSCOLUMNS表中只含有数据类型编号,要获取完整的名字需要从SYSTYPES表中找,一般用户使用的数据类型用XUSERTYPE对应比较好,不会出现一对多的情况。
    (C)SYSCOLUMNS.LENGTH得到的是物理内存的长度,所以NVARCHAR和VARCHAR等类型在数据库中的显示是这个的一半。*/


    ----4、得到表中主键所包含的列名------
    SELECT SYSCOLUMNS.NAME ,SYSOBJECTS.XTYPE
    FROM SYSCOLUMNS,SYSOBJECTS,SYSINDEXES,SYSINDEXKEYS
    WHERE SYSCOLUMNS.ID = OBJECT_ID('BCUSTOMER')
    AND SYSOBJECTS.XTYPE = 'PK'
    AND SYSOBJECTS.PARENT_OBJ = SYSCOLUMNS.ID
    AND SYSINDEXES.ID = SYSCOLUMNS.ID
    AND SYSOBJECTS.NAME = SYSINDEXES.NAME
    AND SYSINDEXKEYS.ID = SYSCOLUMNS.ID
    AND SYSINDEXKEYS.INDID = SYSINDEXES.INDID
    AND SYSCOLUMNS.COLID = SYSINDEXKEYS.COLID;
    /*注意:这是在4张系统表中寻找的,关系比较复杂,大致可以表示为:
    SYSCOLUMNS中存有表中的列信息和表ID,
    SYSOBJECTS表中存有主键名字(即PK_TABLE类似)和表ID,
    SYSINDEXES中存有主键名字和表ID和INDEX编号,
    SYSINDEXKEYS中存有表ID和INDEX编号和列编号,
    一项一项对应起来后就能找到列名了,呼~*/

    ----5、得到表中列的描述内容-----
    '表示没有找到'

    SELECT A.NAME,G.VALUE
    FROM SYSCOLUMNS AS A
    LEFT JOIN SYSPROPERTIES G
    ON A.ID=G.ID
    AND A.COLID = G.SMALLID
    WHERE A.ID='BCUSTOMER'

  • 相关阅读:
    ubuntu16.04使用anaconda创建python虚拟环境
    Ubuntu16.04里安装anaconda3后将python第三方包安装到指定目录下
    conda把包安装到当前激活的环境中
    ubuntu修改环境变量
    conda安装tensorflow
    ASP VNext 开源服务容错处理库Polly
    EntityFramework实现指定字段的通用赋值
    NET流行高性能JSON框架-Json.NET
    .NET网站国际化策略
    软件开发工作流-GitFlow
  • 原文地址:https://www.cnblogs.com/qianjinyan/p/9636535.html
Copyright © 2020-2023  润新知