zoukankan      html  css  js  c++  java
  • 获取SQLSERVER所有库 所有表 所有列 所有字段信息

    最近想起来做一个项目代码生成器,直接生成底层代码..

    这免不了要先行读取数据库已有的信息..

    废话不多说..开整..

    SELECT NAME FROM MASTER..SYSDATABASES  --读取所有库

    上边语句只得到单表单列..里边就全是数据库的名字..

    然后选择数据库后..按此数据库连接重新链接数据库..执行以下语句

    SELECT NAME FROM SYSOBJECTS WHERE TYPE='U'  --读取所有表

    上边语句依然是得到的单表单列,存储的值全不是当前选择的数据库中的表


    用户选择..得到表名..

    SELECT CAST(value AS nvarchar(200)) as tableDescription FROM fn_listextendedproperty ('MS_Description', 'user', 'dbo', 'table', '写入表名', default, default)

    可以使用上述语句来获取表的扩展属性表说明字段  譬如   "用户表"  

    结合之后得到以下语句..可以直接把表名和表说明一起读出

    SELECT NAME,(SELECT CAST(value AS nvarchar(200)) as tableDescription FROM fn_listextendedproperty ('MS_Description', 'user', 'dbo', 'table', SO.NAME, default, default)) FROM SYSOBJECTS AS SO WHERE TYPE='U' 
    Select 
    SCOL.NAME,                    --列名
    SCOL.ISNULLABLE,            --是否为NULL
    SCOL.PREC,                    --长度
    STYPE.NAME AS [TYPE] ,        --字段数据类型
    (SELECT SYS.EXTENDED_PROPERTIES.VALUE FROM SYSCOLUMNS   
    INNER JOIN SYS.EXTENDED_PROPERTIES ON SYSCOLUMNS.ID = SYS.EXTENDED_PROPERTIES.MAJOR_ID   
    AND SYSCOLUMNS.COLID = SYS.EXTENDED_PROPERTIES.MINOR_ID   
    INNER JOIN SYSOBJECTS ON SYSCOLUMNS.ID = SYSOBJECTS.ID   
    WHERE SYSOBJECTS.NAME = SO.NAME AND SYSCOLUMNS.NAME = SCOL.NAME) AS NOTES   --字段说明文字
    
    from SYSCOLUMNS AS SCOL
    LEFT JOIN SYSOBJECTS SO ON SO.ID=SCOL.ID 
    LEFT JOIN SYSTYPES AS STYPE ON STYPE.xtype=SCOL.xtype
    Where 
    SCOL.ID=OBJECT_ID('写入表名')
    AND STYPE.NAME<>'SYSNAME'   --最后这个我也没搞明白  是自己加上的  有时候同一个字段会出来两行数据 其中一个是sysname

      

    上边的语句是自己写的..自己测试结果是正确的..如有不对..请多多指正批评

    在语句中只要在最后写入表名..即可得到一张四列的表..分别是 字段名/字段类型/是否为空/备注

    这四个东西基本上就是生成代码的最重要四个元素了..缺一不可..

    加注:

    SELECT objname,CAST(value AS nvarchar(200)) as fieldDescription FROM fn_listextendedproperty ('MS_Description', 'user', 'dbo', 'table', '写入表名' , 'column', default)

    也可以用上述语句来单独获取表中的字段说明

    在之后就是循环就好了..循环生成读模板..绑数据..写文件

  • 相关阅读:
    docker使用常用命令:启动/重启/关闭docker
    golang 中内存模型
    【转】Linux fork操作之后发生了什么?又会共享什么呢?
    go检查channel是否关闭
    golang select case 用法
    【转】理解字节序 大端字节序和小端字节序
    【转】3种TCP连接异常的情况。
    react-window 多条列表数据加载(虚拟滚动)
    ts 中 interface 与 class 的区别
    js new一个对象的过程,实现一个简单的new方法
  • 原文地址:https://www.cnblogs.com/iiwen/p/4683439.html
Copyright © 2011-2022 走看看