可能是我太落伍了,今天才知道sql2005的擴充套件屬性還可以這麼用。
資料字典的重要性就不用多說了,再小的開發團隊,甚至只有乙個人,這個東西也不可或缺,否則日後發生問題那才要命
以前的資料字典都要單獨拿出時間來進行整理,但問題多多,最明顯的就是和資料結構的變化不同步,而且耗時費力,效果底下
但稍微有點責任心的資料庫維護人員,在編輯資料庫物件時,都會習慣性的編寫備註描述
以前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檔案,貼上進去,用瀏覽器開啟即可閱讀最新版的資料字典!
最終效果截圖:
不用工具生成資料庫字典
資料字典的重要性就不用多說了,再小的開發團隊,甚至只有乙個人,這個東西也不可或缺,否則日後發生問題那才要命 以前的資料字典都要單獨拿出時間來進行整理,但問題多多,最明顯的就是和資料結構的變化不同步,而且耗時費力,效果底下 但稍微有點責任心的資料庫維護人員,在編輯資料庫物件時,都會習慣性的編寫備註描述...
自動生成資料庫字典
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 ...