码迷,mamicode.com
首页 > 数据库 > 详细

获取SQLSERVER所有库 所有表 所有列 所有字段信息

时间:2015-07-28 18:16:26      阅读:193      评论:0      收藏:0      [点我收藏+]

标签:

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

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

废话不多说..开整..

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

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

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

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

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

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

SELECT SC.Name --查询【列名】【类型】【长度】【描述】  
    ,[TYPE] = ST.Name + CASE ST.user_type_id    
    WHEN 41 THEN (+CAST(SC.scale AS VARCHAR) +)                                       -- time  
    WHEN 42 THEN (+CAST(SC.scale AS VARCHAR) +)                                       -- datetime2  
    WHEN 43 THEN (+CAST(SC.scale AS VARCHAR) +)                                       -- datetimeoffset  
    WHEN 106 THEN (+CAST(SC.precision  AS VARCHAR)+,+ CAST(SC.scale AS VARCHAR) +)  -- decimal  
    WHEN 108 THEN (+CAST(SC.precision  AS VARCHAR)+,+ CAST(SC.scale AS VARCHAR) +)  -- numeric  
    WHEN 165 THEN (+ISNULL(CAST(NULLIF(SC.max_length,-1) AS VARCHAR),max) +)        -- varbinary  
    WHEN 167 THEN (+ISNULL(CAST(NULLIF(SC.max_length,-1) AS VARCHAR),max) +)        -- varchar  
    WHEN 173 THEN (+ISNULL(CAST(NULLIF(SC.max_length,-1) AS VARCHAR),max) +)        -- binary  
    WHEN 175 THEN (+ISNULL(CAST(NULLIF(SC.max_length,-1) AS VARCHAR),max) +)        -- char  
    WHEN 231 THEN   
        CASE SC.max_length   
        WHEN -1 THEN (max)  
        ELSE (+ISNULL(CAST(NULLIF(SC.max_length / 2,-1) AS VARCHAR),max) +)      -- nvarchar  
        END   
    WHEN 239 THEN (+ISNULL(CAST(NULLIF(SC.max_length,-1) AS VARCHAR),max) +)     -- nchar  
    ELSE ‘‘   
    END    
        ,CASE WHEN SC.Is_Nullable = 0 THEN NOT NULL                                  --是否允许为空  
        WHEN SC.Is_Nullable = 1 THEN NULL   
        ELSE UNKNOWN END IsNullable  
,(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 = SC.NAME) Description             --SO.NAME表名、SC.NAME列名   
FROM SYS.COLUMNS SC,SYS.TYPES ST,SYS.SYSOBJECTS SO                                     --列名信息和表结构信息  
WHERE SC.user_type_id = ST.user_type_id AND SC.object_id = SO.ID AND SO.XTYPE=U AND SO.NAME=写入表名  

 

上边的语句是从网上复制过来的..先谢过那位大神了..

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

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

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

 

获取SQLSERVER所有库 所有表 所有列 所有字段信息

标签:

原文地址:http://www.cnblogs.com/iiwen/p/4683439.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!