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

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

废话不多说..开整..

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)

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

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

获取SQLSERVER所有库 所有表 所有列 所有字段信息的更多相关文章

  1. MSSQL·查看DB中所有表及列的相关信息

    阅文时长 | 0.6分钟 字数统计 | 1013.6字符 主要内容 | 1.引言&背景 2.声明与参考资料 『MSSQL·查看DB中所有表及列的相关信息』 编写人 | SCscHero 编写时 ...

  2. Sql中判断"库、表、列,视图,存储过程"是否存在

    --判断数据库是否存在 IF EXISTS (SELECT * FROM MASTER.sys.sysdatabases WHERE NAME = '库名') PRINT 'exists ' else ...

  3. sqlserver 比较两个表的列

    一.问题 给了两个各有四五十个列的表,找出他们相同的列和不同的列 二.查询两个表的列,存在临时表 --#a ,#b都是临时表,当前连接断开后自动删除--RANK() OVER (ORDER BY sy ...

  4. mssql sqlserver 给已存在表添加新的字段及字段备注的方法

    转自:http://www.maomao365.com/?p=8102 摘要: 下文讲述向已存在表上添加新字段及字段备注的方法,如下所示: 实验环境:sql server 2008 R2 1. 添加新 ...

  5. tsql获取sqlserver某个库下所有表

    ) declare my_cursor cursor for (select [name] from SysObjects where XType='U') open my_cursor fetch ...

  6. oracle数据库获取指定表的列的相关信息

    1.很多时候我们需要从数据库中获取指定表的所有列的相关属性,如 name,commens,datatype,datalength,pk等.下面就是制定的语句. select c.TABLE_NAME ...

  7. SqlServer和Oracle判断表和列是否存在

    SqlServer .判断表Users是否存在 if object_id(N'Users',N'U') is not null print '存在' else print '不存在' .判断表User ...

  8. SQLServer在多个表中都增加一个字段的方法

    1.使用游标 declare @sql varchar(), @name varchar() declare my_cursor scroll cursor for select name from ...

  9. PCB MS SQL 通过表名查询各字段信息和vb.net C# module类代码

    正式表:各字段内容获取 ) SET @tabname = 'ppeflow' SELECT @tabname AS '表名' ,(CASE ))+ ')' )) ) )) + ')' )) ) )) ...

随机推荐

  1. jquery-焦点定位追加内容

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  2. maven2打包不同jdk版本的包

    通常在一些特别情况下,我们需要为单独某一个构件打包多个不同jdk版本的包,用来支持不同的jdk,基于maven我们就可以很方便的做到这点. 1.在项目的pom文件中加入如下配置 <project ...

  3. 一起学HTML基础-CSS样式表常用样式属性

    样式属性 背景与前景: background-color:#F90; /*背景颜色,样式表优先级最高*/ background-image:url(路径); /*设置背景图片(默认)*/ backgr ...

  4. ASP.NET MVC 4 异步加载控制器

    ASP.NET 4 Developer preview中的异步操纵器 在放弃了对.NET 3的支持之后, ASP.NET MVC 4 彻底拥抱了Task类库, 你不需求再蛋疼的给每个Action写两个 ...

  5. 配置jdk相关的记录

    1.8.0_60JAVA_HOME=/usr/local/java/jdk1.8.0_60JRE_HOME=${JAVA_HOME}/jreCLASSPATH=.:${JAVA_HOME}/lib:$ ...

  6. 【codevs1170】 双栈排序

    http://codevs.cn/problem/1170/ (题目链接) 题意 给出一个初始序列,判断能否通过两个栈的入栈和出栈操作构造出一个有序序列.若可以,输出字典序最小的方案. Solutio ...

  7. 利用iconv进行文件编码批量原地转换

    将当前目录及其所有子目录中的以 java 为后缀的文件,从 GB18030 转换为 UTF-8: find .  -name "*.java" -exec sh -c " ...

  8. poj 2945 trie树统计字符串出现次数

    用记录附加信息的val数组记录次数即可. trie的原理:每个可能出现的字目给一个编号c,那么整个树就是一个c叉树 ch[u][c]表示 节点u走c边过去之后的节点 PS:trie树还有种动态写法,使 ...

  9. 【转】CSS3的REM设置字体大小

    rem 长度单位   在Web中使用什么单位来定义页面的字体大小,至今天为止都还在激烈的争论着,有人说PX做为单位好,有人说EM优点多,还有人在说百分比方便,以至于出现了CSS Font-Size: ...

  10. 怎样用命令行编译C#程序

    1. 把程序拷贝至记事本 2.另存为*cs格式 3.找到VS2015提供的命令提示 4.要把命令行指向程序所在的目录(可以有个小软件) 如果在其他的盘符,先敲D:,然后再cd 5.输入csc hell ...