数据库表结构生成器v1.0发布
发布一个小工具——数据库表结构生成器
用途:面对大型项目,根据数据库表结构生成图片,可以瞬间摸清项目底细,一切尽在掌握。
功能介绍:
* 根据数据库表结构生成图片
* 适用于MS Sql Server 2000, Sql Server 2005 and Sql Server 2008 etc.
* 根据系统sql语句导出数据库表结构
* 利用GDI+将表结构生成图片
符程序截图:
截图1:登录
截图2:生成后
截图3:生成的表结构
下面记录下程序的实现思路:
- 连接到指定数据库,由特定系统sql语句得到数据表table
- 根据table name得到该表单表结构,如字段名、类型、长度以及注释说明等,当然,还有table的说明(注释)
如图所示: - 将该结果集利用GDI+技术生成图片并加上特定的修改.
程序中用到很多sql server 系统sql语句,如下:
- 得到sql server的版本
exec master.dbo.xp_msver 'ProductVersion'
介绍下sql server的发展历史:
version 对应数据库 7.0 是由Microsoft Sybase 和Ashton-Tate三家公司共同开发的,于1988 年推出了第一个OS/2 版本 8.0 sql srever 2000 9.0 sql server 2005 10.0 sql server 2008 11.0 sql server 2012(没试过,推测)
- 得到非系统数据表——即得到用户自己创建的表
SELECT O.object_id AS TableId, TableName=O.name , TableDesc= PTB.[value] FROM sys.columns C INNER JOIN sys.objects O ON C.[object_id]=O.[object_id] AND O.type='U' AND O.is_ms_shipped=0 INNER JOIN sys.types T ON C.user_type_id=T.user_type_id LEFT JOIN sys.extended_properties PTB ON PTB.class=1 AND PTB.minor_id=0 AND C.[object_id]=PTB.major_id WHERE C.column_id=1 ORDER BY TableName
- 根据表名得到表结构,类似于oracle或者mysql的desc 命令
SELECT TableName=case when a.colorder=1 then d.name else '' end, TableDesc=case when a.colorder=1 then isnull(f.value,'') else '' end, ColumnId=a.colorder, ColumnName=a.name, [Identity]=case when COLUMNPROPERTY( a.id,a.name,'IsIdentity')=1 then '√'else '' end, PrimaryKey=case when exists(SELECT 1 FROM sysobjects where xtype='PK' and name in ( SELECT name FROM sysindexes WHERE indid in( SELECT indid FROM sysindexkeys WHERE id = a.id AND colid=a.colid ))) then '√' else '' end, Type=b.name, [Precision]=a.length, Length=COLUMNPROPERTY(a.id,a.name,'PRECISION'), Scale=isnull(COLUMNPROPERTY(a.id,a.name,'Scale'),0), NullAble=case when a.isnullable=1 then '√'else '' end, [Default]=isnull(e.text,''), ColumnDesc=isnull(g.[value],'') , IndexName=case when isnull(h.索引名称,'') like 'IX_%' then '√' else '' end, IndexSort=case when isnull(h.索引名称,'') like 'IX_%' then isnull(h.排序,'') else '' end FROM syscolumns a left join systypes b on a.xtype=b.xusertype inner join sysobjects d on a.id=d.id and d.xtype='U' and d.name<>'dtproperties' left join syscomments e on a.cdefault=e.id left join sys.extended_properties g on a.id=g.major_id and a.colid=g.minor_id left join sys.extended_properties f on d.id=f.major_id and f.minor_id =0 left join( select 索引名称=a.name,c.id,d.colid ,排序=case indexkey_property(c.id,b.indid,b.keyno,'isdescending') when 1 then '降序' when 0 then '升序' end from sysindexes a join sysindexkeys b on a.id=b.id and a.indid=b.indid join (--这里的作用是有多个索引时,取索引号最小的那个 select id,colid,indid=min(indid) from sysindexkeys group by id,colid) b1 on b.id=b1.id and b.colid=b1.colid and b.indid=b1.indid join sysobjects c on b.id=c.id and c.xtype='U' and c.name<>'dtproperties' join syscolumns d on b.id=d.id and b.colid=d.colid where a.indid not in(0,255) ) h on a.id=h.id and a.colid=h.colid where d.name=N'{0}' order by a.id,a.colorder
- 剩下的重点应该就是GDI+了,这个就自己认真看代码吧 :)
source code
最后,最重要的是源代码在哪里? 在这,https://github.com/FrankFan/DatabasePicExporter
可执行文件在这里:https://files.cnblogs.com/fanyong/DatabasePicExporter.rar
作者:樊勇
出处:http://www.cnblogs.com/fanyong/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
我的联系方式:fanyong@gmail.com
个人独立博客:www.fy98.com