自动生成数据库字典(sql2008)

每次做项目的时候都要做数据字典,这种重复的工作实在很是痛苦,于是广找资料,终于完成了自动生成数据库字典的工作,废话少说,上代码。

  存储过程:


SET ANSI_NULLS ON

GO

SET QUOTED_IDENTIFIER ON

GO

-- =============================================

-- Author:        <Carbe>

-- Create date: <2014-09-19>

-- Description:    <生成数据库字典>

-- =============================================

CREATE PROCEDURE [dbo].[CreateDatabaseDictionarie]

AS

BEGIN

DECLARE @TableName nvarchar(35),@htmls varchar(8000)

DECLARE @字段名称 VARCHAR(200)

DECLARE @类型  VARCHAR(200)

DECLARE @长度 VARCHAR(200)

DECLARE @数值精度 VARCHAR(200)

DECLARE @小数位数 VARCHAR(200)

DECLARE @默认值 VARCHAR(200)

DECLARE @允许为空 VARCHAR(200)

DECLARE @外键 VARCHAR(200)

DECLARE @主键 VARCHAR(200)

DECLARE @描述 VARCHAR(200)

SET NOCOUNT ON;

DECLARE Tbls CURSOR

FOR

Select distinct Table_name

FROM INFORMATION_SCHEMA.COLUMNS

order by Table_name

OPEN Tbls

PRINT '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">'

PRINT '<html xmlns="http://www.w3.org/1999/xhtml">'

PRINT '    <head>'

PRINT '        <title>KC管理系统-数据库字典</title>'

PRINT '        <style type="text/css">'

PRINT '            body{margin:0; font:11pt "arial", "微软雅黑"; cursor:default;}'

PRINT '            .tableBox{margin:10px auto; padding:0px; width:1000px; height:auto; background:#FBF5E3; border:1px solid #45360A}'

PRINT '            .tableBox h3 {font-size:12pt; height:30px; line-height:30px; background:#45360A; padding:0px 0px 0px 15px; color:#FFF; margin:0px; text-align:left }'

PRINT '            .tableBox table {width:1000px; padding:0px }'

PRINT '            .tableBox th {height:25px; border-top:1px solid #FFF; border-left:1px solid #FFF; background:#F7EBC8; border-right:1px solid #E0C889; border-bottom:1px solid #E0C889 }'

PRINT '            .tableBox td {height:25px; padding-left:10px; border-top:1px solid #FFF; border-left:1px solid #FFF; border-right:1px solid #E0C889; border-bottom:1px solid #E0C889 }'

PRINT '        </style>'

PRINT '    </head>'

PRINT '    <body>'

FETCH NEXT FROM Tbls INTO @TableName

WHILE @@FETCH_STATUS = 0

BEGIN

Select @htmls = '        <h3>' + @TableName + ' : '+ CAST(Value as varchar(1000)) + '</h3>'

FROM sys.extended_properties AS A

WHERE A.major_id = OBJECT_ID(@TableName)

and name = 'MS_Description' and minor_id = 0

PRINT '        <div class="tableBox">'

PRINT @htmls

PRINT '            <table cellspacing="0">'

PRINT '                <tr>'

PRINT '                    <th>字段名称</th>'

PRINT '                    <th>类型</th>'

PRINT '                    <th>长度</th>'

PRINT '                    <th>数值精度</th>'

PRINT '                    <th>小数位数</th>'

PRINT '                    <th>默认值</th>'

PRINT '                    <th>允许为空</th>'

PRINT '                    <th>外键</th>'

PRINT '                    <th>主键</th>'

PRINT '                    <th>描述</th>'

PRINT '                </tr>'

DECLARE TRows CURSOR

FOR

SELECT

'                    <td>' + CAST(clmns.name AS VARCHAR(35)) + '</td>',

'                    <td>' + CAST(udt.name AS CHAR(15)) + '</td>' ,

'                    <td>' + CAST(CAST(CASE WHEN typ.name IN (N'nchar', N'nvarchar') AND clmns.max_length <> -1 THEN clmns.max_length/2 ELSE clmns.max_length END AS INT) AS VARCHAR(20)) + '</td>',

'                    <td>' + CAST(CAST(clmns.precision AS INT) AS VARCHAR(20)) + '</td>',

'                    <td>' + CAST(CAST(clmns.scale AS INT) AS VARCHAR(20)) + '</td>',

'                    <td>' + isnull(CAST(cnstr.definition AS VARCHAR(20)),'') + '</td>',

'                    <td>' + CAST(clmns.is_nullable AS VARCHAR(20)) + '</td>' ,

'                    <td>' + CAST(clmns.is_computed AS VARCHAR(20)) + '</td>' ,

'                    <td>' + CAST(clmns.is_identity AS VARCHAR(20)) + '</td>' ,

'                    <td>' + ISNULL(CAST(exprop.value AS VARCHAR(500)),'') + '</td>'

FROM sys.tables AS tbl

INNER JOIN sys.all_columns AS clmns ON clmns.object_id=tbl.object_id

LEFT OUTER JOIN sys.indexes AS idx ON idx.object_id = clmns.object_id AND 1 =idx.is_primary_key

LEFT OUTER JOIN sys.index_columns AS idxcol ON idxcol.index_id = idx.index_id AND idxcol.column_id = clmns.column_id AND idxcol.object_id = clmns.object_id AND 0 = idxcol.is_included_column

LEFT OUTER JOIN sys.types AS udt ON udt.user_type_id = clmns.user_type_id

LEFT OUTER JOIN sys.types AS typ ON typ.user_type_id = clmns.system_type_id AND typ.user_type_id = typ.system_type_id

LEFT JOIN sys.default_constraints AS cnstr ON cnstr.object_id=clmns.default_object_id

LEFT OUTER JOIN sys.extended_properties exprop ON exprop.major_id = clmns.object_id AND exprop.minor_id = clmns.column_id AND exprop.name = 'MS_Description'

WHERE (tbl.name = @TableName and exprop.class = 1) --I don't wand to include comments on indexes

ORDER BY clmns.column_id ASC

OPEN TRows

FETCH NEXT FROM TRows INTO @字段名称,@类型,@长度,@数值精度,@小数位数,@默认值,@允许为空,@外键,@主键,@描述

WHILE @@FETCH_STATUS = 0

BEGIN

PRINT '                <tr>'

PRINT @字段名称

PRINT @类型

PRINT @长度

PRINT @数值精度

PRINT @小数位数

PRINT @默认值

PRINT @允许为空

PRINT @外键

PRINT @主键

PRINT @描述

PRINT '                </tr>'

FETCH NEXT FROM TRows INTO @字段名称,@类型,@长度,@数值精度,@小数位数,@默认值,@允许为空,@外键,@主键,@描述

END

CLOSE TRows

DEALLOCATE TRows

PRINT '            </table>'

PRINT '        </div>'

FETCH NEXT FROM Tbls INTO @TableName

END

PRINT '    </body>'

PRINT '</html>'

CLOSE Tbls

DEALLOCATE Tbls

END

 当然这些通过PRING出来的代码使用传统的方式是调用不到的,通过查找资料,终于在国外一个XXX网站找到了解决方案。


private static string message = "";

public static string ExecuteNonQuery(string connextionString, CommandType commandType, string commandText, bool outputMsg)

{

if (connextionString == null || connextionString.Length == 0) throw new ArgumentNullException("connectionString");

// Create & open a SqlConnection, and dispose of it after we are done

using (SqlConnection connection = new SqlConnection(connextionString))

{

message = "";

connection.Open();

connection.InfoMessage += delegate(object sender, SqlInfoMessageEventArgs e)

{

message += "\n" + e.Message;

};

// Call the overload that takes a connection in place of the connection string

if (connection == null) throw new ArgumentNullException("connection");

// Create a command and prepare it for execution

SqlCommand cmd = new SqlCommand(commandText, connection); ;

cmd.CommandType = commandType;

// Finally, execute the command

int retval = cmd.ExecuteNonQuery();

// Detach the SqlParameters from the command object, so they can be used again

cmd.Parameters.Clear();

connection.Close();

return message;

}

}

  调用就不用写了嘛。一切就这么简单,生成的是一份标准的htm代码,可直接放到HTML里面,当然也可以直接从数据库读取出来显示。

最新内容请见作者的GitHub页:http://qaseven.github.io/

时间: 2024-11-08 17:21:53

自动生成数据库字典(sql2008)的相关文章

PHP实现获取并生成数据库字典的方法_php技巧

本文实例讲述了PHP实现获取并生成数据库字典的方法.分享给大家供大家参考,具体如下: <?php /** * 生成mysql数据字典 */ header("Content-type:text/html;charset=utf-8"); // 配置数据库 $database = array(); $database['DB_HOST'] = 'localhost'; $database['DB_NAME'] = 'test'; $database['DB_USER'] = 'roo

原来的SSH2程序加了maven多模块继承和依赖后不能自动生成数据库中的表了

问题描述 我的程序以前在编译的时候可以自动生成数据库中的表,现在我给程序加上了maven,实现了多模块的maven继承和依赖.各模块之间关系结构如下.现在的问题是程序在编译的时候不能自动生成数据库中的表了,TOMCAT启动也不报错,TOMCAT可以正常启动.我第一次接触MAVEN,也不知道到底是哪里有问题.我想如果是缺少包的话程序应该报错的.请各位高手帮忙看看到底如何解决这个问题,在线等待中,谢谢了. 解决方案 解决方案二:在线等了俩个小时了怎么还是没人回答呢?

entity framework自动生成数据库外键“表名_外键”的解决方案

今天在尝试使用EF的Code First功能的时候,发现EF自动生成的数据库中表字段不是自己想要的,因为一般来讲,数据库表中的外键,我们希望它的名称跟它关联的表的主键名称相同.但是EF生成的外键字段却是"被关联的表名_主键名"(如图1所示).这个很奇怪. 图1    被关联的表名_主键名的字段 下面代码是数据库表对应的实体类代码. 1 public class UserInfo 2 { 3 [Key] 4 public int UserID { get; set; } 5 public

hibernate中怎么指定自动生成数据库表中字段的类型

问题描述 在网上当了个小项目学习.利用实体类和hbm.xml反向生成了数据库中表,其中一个实体类的一个属性为boolean,反向生成表后在oracle数据库中对应的字段是number(1).突然想是否在反向生成表的时候可以指定数据库中字段的类型.比如说把这里的Number(1)在自动生成时改为char类型的.这种功能是否可以实现呢,要怎样实现?求高手指点! 解决方案 解决方案二: hibernate好像不可以这样吧!解决方案三: 引用1楼duanwu2330323的回复: hibernate好像

网络相册开发(6)——ant自动生成数据库

在工程目录下创建libs/hibernate/ ,放入 hibernate-tools-3.2.0.ga.jar jtidy-4aug2000r7-dev.jar build.properties Java代码 project.name=sw project.version=1.0 basedir=. build.dir =${basedir}/build web.dir = ${basedir}/WebRoot lib.dir = ${basedir}/libs sql.dir = ${bas

PHP FOR MYSQL 代码生成助手(根据Mysql里的字段自动生成类文件的)_php技巧

根据 Mysql 里的字段 自动生成 类文件: 但需要导入: require_once ./db/ez_sql_core.php;require_once ./db/ez_sql_mysql.php; 帮助文档:http://jvmultimedia.com/docs/ezsql/ez_sql_help.htm  上图 : 核心代码: 复制代码 代码如下: <?php class db{ /*****************************************************

工欲善其事,必先利其器——利用PowerDesigner建模并生成数据库文件

  首先介绍一下Power Designer:它是Sybase公司的CASE工具集,使用它可以方便地对管理信息系统进行分析设计,它几乎包括了数据库设计全过程.利用Power Designer可以制作数据流程图.概念数据模型.物理数据模型,还可以为数据仓库制作结构模型,对团队设计模型进行控制.它可以与许多流行的软件开发工具如PowerBuilder.Delphi.VB等相配合缩短开发时间以及使系统设计更优化.   在机房收费系统重构阶段,设计数据库是最令人头疼的,设计一个好的数据库可以为以后省下不

根据当月数据库自动生成下个月数据库--3

数据|数据库 --创建一个每月最后一个工作日执行的作业,调用上述存储过程实现自动创建数据库 use mastergo --设置 SQL Agent 服务为自动启动exec msdb..sp_set_sqlagent_properties @auto_start=1go --创建作业exec msdb..sp_add_job @job_name=N'自动建库处理' --创建作业步骤declare @sql varchar(800),@dbname varchar(250)select @sql=N

根据数据库自动生成INSERT/UPDATE更新语句

数据|数据库|语句 在编写程序中,写添加和更新SQL语句是一个比较烦琐的过程,特别是在表结构比较复杂的时候这个程序主要是根据数据表格式自动生成添加/更新的SQL语句,然后由程序员直接加入到程序中,方便编程 下面是文件,方法建立一个单独的文件,按照下面的说明建立相关文件,运行即可index.php     索引文件config.php    配置文件,转换get/post数据addxxx.php    根据提交表格数据生成SQL语句addxxx2.php    根据数据库表信息生成SQL语句,配置