qileilove

          blog已經轉移至github,大家請訪問 http://qaseven.github.io/

          自動生成數據庫字典(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里面,當然也可以直接從數據庫讀取出來顯示。

          posted on 2014-10-09 10:29 順其自然EVO 閱讀(256) 評論(0)  編輯  收藏 所屬分類: 測試學習專欄

          <2014年10月>
          2829301234
          567891011
          12131415161718
          19202122232425
          2627282930311
          2345678

          導航

          統計

          常用鏈接

          留言簿(55)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 山阳县| 庆阳市| 朝阳县| 沙雅县| 长岭县| 阿拉善右旗| 五河县| 南平市| 勐海县| 准格尔旗| 长寿区| 分宜县| 淮阳县| 定日县| 伊吾县| 汾阳市| 固阳县| 武川县| 鹤庆县| 兴业县| 田东县| 闽侯县| 金华市| 龙井市| 扎兰屯市| 韩城市| 凤凰县| 宝应县| 平南县| 化隆| 定远县| 盐津县| 石城县| 巴里| 穆棱市| 宜君县| 高雄市| 上栗县| 苍山县| 宜良县| 华安县|