不用工具生成資料庫字典

2021-07-16 12:09:17 字數 4364 閱讀 6446



資料字典的重要性就不用多說了,再小的開發團隊,甚至只有乙個人,這個東西也不可或缺,否則日後發生問題那才要命

以前的資料字典都要單獨拿出時間來進行整理,但問題多多,最明顯的就是和資料結構的變化不同步,而且耗時費力,效果底下

但稍微有點責任心的資料庫維護人員,在編輯資料庫物件時,都會習慣性的編寫備註描述

以前sql2k時,表備註、字段備註都是直接寫在名稱後面,sql會將這些資訊儲存到系統表:sysproperties

但到了sql2005,這些備註都轉移到了擴充套件屬性裡,類似的,sql會將這些資訊儲存到系統表:sys.extended_properties

填寫表擴充套件屬性的截圖:

在ssms裡,在表或者欄位上右鍵,選「屬性」,都可以看到「擴充套件屬性」頁,其中:

屬性名稱建議填寫固定值:ms_description,據說這樣可以相容其他的資料字典工具,方便其提取

屬性值可以填寫表或者欄位的詳細備註資訊

可以為乙個表或者字段新增多個擴充套件屬性。

擴充套件屬性可以跟隨資料庫備份及還原操作進行傳遞與分發

那麼,如果已經填寫了擴充套件屬性,該如何自動生成資料字典呢?

首先需要對ssms輸出的文字格式進行一下變動:

不要選中:在結果集中包括列標題,如圖:

然後,新建查詢視窗,並選擇:以文字格式顯示結果,如圖:

重點來了,複製以下的t-sql指令碼,並執行:

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

open tbls

print ''

print ''

print ''

print ''

fetch next from tbls

into @tablename

while @@fetch_status = 0

begin

print ''

select ''

from sys.extended_properties a

where a.major_id = object_id(@tablename)

and name = 'ms_description' and minor_id = 0

print ''

--get the description of the table

--characters 1-250

print '' --set up the column headers for the table

print '欄位名稱'

print '描述'

print '主鍵'

print '外來鍵'

print '型別'

print '長度'

print '數值精度'

print '小數字數'

print '允許為空'

print '計算列'

print '標識列'

print '預設值'

--get the table data

select '

', '' + cast(clmns.name as varchar(35)) + '',

'' + isnull(cast(exprop.value as varchar(500)),'') + '',

'' + cast(isnull(idxcol.index_column_id, 0)as varchar(20)) + '',

'' + 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)) + '',

'' + cast(udt.name as char(15)) + '' ,

'' + 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)) + '',

'' + cast(cast(clmns.precision as int) as varchar(20)) + '',

'' + cast(cast(clmns.scale as int) as varchar(20)) + '',

'' + cast(clmns.is_nullable as varchar(20)) + '' ,

'' + cast(clmns.is_computed as varchar(20)) + '' ,

'' + cast(clmns.is_identity as varchar(20)) + '' ,

'' + isnull(cast(cnstr.definition as varchar(20)),'') + ''

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 '

' print '

' fetch next from tbls

into @tablename

endprint '

'close tbls

deallocate tbls

執行完成後,會在結果視窗中列印出一大段html**

複製這段html**,新建乙個.htm的web檔案,貼上進去,用瀏覽器開啟即可閱讀最新版的資料字典!

最終效果截圖:

不用工具生成資料庫字典

可能是我太落伍了,今天才知道sql2005的擴充套件屬性還可以這麼用。資料字典的重要性就不用多說了,再小的開發團隊,甚至只有乙個人,這個東西也不可或缺,否則日後發生問題那才要命 以前的資料字典都要單獨拿出時間來進行整理,但問題多多,最明顯的就是和資料結構的變化不同步,而且耗時費力,效果底下 但稍微有...

自動生成資料庫字典

1.首先需要填寫表的每一列的說明 2.建立試圖 go object view dbo sura view dbdictionary script date 05 31 2013 17 19 19 set ansi nulls on goset quoted identifier on gocreat...

生成資料庫字典SQL

select 表名 case when a.colorder 1 then d.name else end,表說明 case when a.colorder 1 then isnull f.value,else end,字段序號 a.colorder,欄位名 a.name,標識 case when ...