自己動手製作數據字典

来源:http://www.cnblogs.com/phprun/archive/2017/02/22/6427085.html
-Advertisement-
Play Games

--資料庫表名及欄位名都無數據字典,現在補充上。 --暫時想到如下笨辦法: --思路,分兩步,一是填寫表的字典。二是填寫表中欄位的字典。 --將表名導出到Table_Description --將列名導出到Column_Description --然後填寫上Description,最後調用存儲過程, ...


 

--資料庫表名及欄位名都無數據字典,現在補充上。   --暫時想到如下笨辦法: --思路,分兩步,一是填寫表的字典。二是填寫表中欄位的字典。 --將表名導出到Table_Description --將列名導出到Column_Description --然後填寫上Description,最後調用存儲過程,分別更新或添加字典到表和欄位上。 --最後,利用三視圖,顯示數據字典:表結構,索引,全部用戶對象。表結果是重點。 --也可以用動軟生成Word或Html形式。   一、開始:導出表信息到Table_Description表 創建Table_Description表 create table Table_Description (TableName nvarchar(50),Descriptions nvarchar(255),RowCounts int,IsUsed bit)   載入用戶表到Table_Description表 insert into Table_Description (TableName) select name from sys.tables a where name not in ('sysdiagrams','Table_Description','Column_Description') and not exists (select 1 from Table_Description where TableName=a.name) order by name   統計表記錄行總數代碼示例: select schema_name(t.schema_id) as [Schema], t.name as TableName,i.rows as [RowCount] from sys.tables as t, sysindexes as i where t.object_id = i.id and i.indid <=1   更新表記錄行總數 update  a set rowcounts=b.[rowcount] from Table_Description  a, (select schema_name(t.schema_id) as [Schema], t.name as TableName,i.rows as [RowCount] from sys.tables as t, sysindexes as i where t.object_id = i.id and i.indid <=1) b where a.TableName=b.TableName   單獨填寫各表的字典 update Table_Description set Descriptions='客戶資料表.主檔',isused=1 where TableName='KFZL'    刪除無用資料字典表 delete from Table_Description where isnull(IsUsed,0)=0   到此字典表Table_Description填寫完畢,結果如下圖:        二、載入字典表的全部列到Column_Description表 載入字典表的全部列 create table Column_Description (TableName nvarchar(50),ColumnName nvarchar(50),Descriptions nvarchar(255),IsUsed bit) insert into Column_Description (TableName,ColumnName) select b.TableName,a.name from sys.all_columns a,Table_Description b where a.object_id = object_id(b.TableName) and b.IsUsed=1 and not exists (select 1 from Column_Description c where b.TableName=c.TableName and a.name=c.ColumnName) order by b.TableName,a.column_id     導出Column_Description到Excel進行字典填寫,填寫完後,回傳到Column_Description表中。效果圖如下:       三、批量添加數據表的字典描述     declare @TableName nvarchar(50),@Descriptions nvarchar(255)   declare cur cursor for select tablename,descriptions from table_description where isnull(descriptions,'')<>'' order by tablename open cur fetch next from cur into @TableName,@Descriptions while (@@fetch_status=0) begin     IF EXISTS (select 1 from sys.extended_properties WHERE name='MS_Description' and major_id=OBJECT_ID(''+@TableName+'') and minor_id=0)      begin         EXEC sp_updateextendedproperty N'MS_Description',@Descriptions,N'SCHEMA',N'dbo',N'TABLE',@TableName     end     else     begin         EXEC sp_addextendedproperty N'MS_Description',@Descriptions,N'SCHEMA',N'dbo',N'TABLE',@TableName      end          print '數據表['+@TableName+']描述['+@Descriptions+']添加成功!'       fetch next from cur into @TableName,@Descriptions end close cur deallocate cur     四、批量添加數據欄位的字典描述     declare @TableName nvarchar(50),@ColumnName nvarchar(50),@Descriptions nvarchar(255)   declare cur cursor for select tablename,columnname,descriptions from column_description where isnull(descriptions,'')<>'' order by tablename,columnname open cur fetch next from cur into @TableName,@ColumnName,@Descriptions while (@@fetch_status=0) begin     IF EXISTS (select 1 from sys.extended_properties WHERE name='MS_Description' and major_id=OBJECT_ID(''+@TableName+'')      and minor_id in (select colid from syscolumns where id=object_id(''+@TableName+'') and name=''+@ColumnName+'') )     begin         EXEC sp_updateextendedproperty N'MS_Description',@Descriptions,N'SCHEMA',N'dbo',N'TABLE',@TableName,N'COLUMN',@ColumnName     end     else     begin         EXEC sp_addextendedproperty N'MS_Description',@Descriptions,N'SCHEMA',N'dbo',N'TABLE',@TableName,N'COLUMN',@ColumnName     end          print '數據表['+@TableName+']欄位['+@ColumnName+']描述['+@Descriptions+']添加成功!'       fetch next from cur into @TableName,@ColumnName,@Descriptions end close cur deallocate cur       五、利用視圖顯示數據字典     Set nocount on   DECLARE @TableName nvarchar(35)   DECLARE Tbls CURSOR   FOR       /*Select distinct Table_name       FROM INFORMATION_SCHEMA.COLUMNS       --put any exclusions here       --where table_name not like '%old'       order by Table_name  */    --上面寫沒有排除視圖,修改為下麵     --select name from dbo.SysObjects WHERE OBJECTPROPERTY(ID, 'IsUserTable') = 1     --and name<>'sysdiagrams' order by name     select tablename from table_description order by tablename   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 '<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />' PRINT '<title>'+db_name()+'資料庫字典</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       PRINT '<div class="tableBox">'       Select '<h3>' + @TableName + ' : '+cast(Value as varchar(1000)) + '</h3>'       FROM sys.extended_properties A       WHERE A.major_id = OBJECT_ID(@TableName)       and name = 'MS_Description' and minor_id = 0       PRINT '<table cellspacing="0">'       --Get the Description of the table       --Characters 1-250       PRINT '<tr>' --Set up the Column Headers for the Table       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 '<th>標識列</th>'       PRINT '<th>預設值</th>'       --Get the Table Data       SELECT '</tr><tr>',       '<td>' + CAST(clmns.name AS VARCHAR(35)) + '</td>',       '<td>' + ISNULL(CAST(exprop.value AS VARCHAR(500)),'') + '</td>',       '<td>' + CAST(ISNULL(idxcol.index_column_id, 0)AS VARCHAR(20)) + '</td>',       '<td>' + CAST(ISNULL(       (SELECT TOP 1 1       FROM sys.foreign_key_columns AS fkclmn       WHERE fkclmn.parent_column_id = clmns.column_id       AND fkclmn.parent_object_id = clmns.object_id       ), 0) AS VARCHAR(20)) + '</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>' + 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(cnstr.definition AS VARCHAR(20)),'') + '</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       PRINT '</tr></table>'       PRINT '</div>'       FETCH NEXT FROM Tbls       INTO @TableName   END   PRINT '</body></HTML>'   CLOSE Tbls   DEALLOCATE Tbls             效果圖如下:          總結:    整體來說,自己第一次動手還算滿意!              
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 一,約束以及修改數據表 約束的作用?1.約束保證數據的完整性、一致性;2.約束分為表級約束、列級約束;3.約束類型包括:NOT NULL(非空約束)、PRIMARY KEY(主鍵約束)、UNIQUE KEY(唯一約束)、DEFAULT(預設約束)、FOREIGN KEY(外鍵約束); 列級約束:只針 ...
  • table 表 --delete table drop table Test1; -- Create table create table TEST1 ( ID NUMBER, T_NAME VARCHAR2(100), DT DATE ); -- 添加註釋 comment on column TE ...
  • Redis 3.x.x系列的安裝於之前的2.x.x略有不同,需要先編譯依賴。 ...
  • 接上一回的話,CentOS7.0下安裝好了Nginx服務,對於我們的CNMP,我們可以開始我們的M啦,就是傳統意義上的MySql服務 MySql簡介 MySQL是一個關係型資料庫管理系統,由瑞典MySQL AB 公司開發,目前屬於 Oracle 旗下產品。在 WEB 應用方面,MySQL是最好的 R ...
  • 1. 本地連接MySQL資料庫: Mysql –h 連接地址(本地為localhost) -u 用戶名(root) -p[密碼] [資料庫名]; 舉例 :mysql –h localhost –u root –p123456 db_test(註意:-p後不能有空格) 密碼和資料庫名可以不加。密碼不加 ...
  • SQL 語句主要可以劃分為以下 3 個類別。 DDL(Data Definition Languages)語句:數據定義語言,這些語句定義了不同的數據段、資料庫、表、列、索引等資料庫對象的定義。常用的語句關鍵字主要包括 create、drop、alter等。 就是對資料庫內部的對象進行創建、刪除、修 ...
  • SQL 事務隔離級別 概述 隔離級別用於決定如果控制併發用戶如何讀寫數據的操作,同時對性能也有一定的影響作用。 步驟 事務隔離級別通過影響讀操作來間接地影響寫操作;可以在回話級別上設置事務隔離級別也可以在查詢(表級別)級別上設置事務隔離級別。事務隔離級別總共有6個隔離級別:READ UNCOMMIT ...
  • conda升級預設官網地址,速度會特別慢,現在我們指定一個當前可用的鏡像,步驟如下: 1.執行命令,生成.condarc文件 執行完上述命令後會在當前用戶目錄下生成.condarc文件 2.確認.condarc文件內容 3.確認無誤後,關閉控制台視窗,重新打開才會重新載入配置。 再升級什麼的,會發現 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...