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)

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

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

  • 相关阅读:
    交流课件
    ARC127F ±AB
    CF1566F xor-quiz
    JOISC 2016 Day 1 棋盘游戏
    dev分支和release是什么
    drf 笔记
    drf 序列化的写法 总结
    Linux系统编程
    C/C++ 网络编程
    C++提高编程
  • 原文地址:https://www.cnblogs.com/iiwen/p/4683439.html
Copyright © 2011-2022 走看看