創(chuàng)建能夠保持最新數(shù)據(jù)字典的方法。對數(shù)據(jù)庫做了很多更改,而花費于數(shù)據(jù)庫文檔更新的時間多于數(shù)據(jù)庫管理的時間。
examda提示: 如果你將元數(shù)據(jù)存儲為擴展屬性,那么你可以使用SQL Server 2005在幾秒之內(nèi)為一個數(shù)據(jù)庫創(chuàng)建一個數(shù)據(jù)字典。SQL Server 2005 AdventureWorks示例數(shù)據(jù)庫包含了眾多擴展屬性,所以這個數(shù)據(jù)庫是一個很好的示例。在這篇文章里,我們將介紹兩個核心內(nèi)容。首先是一組腳本示例,它為表和字段添加擴展屬性。其次是生成HTML格式數(shù)據(jù)字典的T-SQL代碼。
示例腳本——sys.sp_addextendedproperty
下面是一個示例腳本,它添加擴展屬性到這個數(shù)據(jù)庫上。
為表和字段添加擴展屬性
/********** The following extended properties already exist in the AdventureWorks database. There is no need to run the script against the database in order for the remaining samples to work.
**********/
USE [AdventureWorks]
GO
--Script to add an Extended Property to the Table
EXEC sys.sp_addextendedproperty
@name=N’MS_Description’,
@value=N’Street address information for customers, employees, and vendors.’ ,
@level0type=N’SCHEMA’,
@level0name=N’Person’, --Schema Name
@level1type=N’TABLE’,
@level1name=N’Address’ --Table Name
GO
--Script to add an Extended Property to a column
EXEC sys.sp_addextendedproperty
@name=N’MS_Description’,
@value=N’First street address line.’ ,
@level0type=N’SCHEMA’,
@level0name=N’Person’, --Schema Name
@level1type=N’TABLE’,
@level1name=N’Address’,--Table Name
@level2type=N’COLUMN’,
@level2name=N’AddressLine1’--Column Name
Go可以通過右鍵單擊SSMS中的對象并選擇屬性來查看擴展屬性:
如果你的數(shù)據(jù)庫在擴展屬性中有數(shù)據(jù),那么你可以運行查詢來提取這個數(shù)據(jù)。在SQL Server管理套件中,選擇Tools | Options,并在Results to Text中不選“Include column headers in the result set”(在結(jié)果集中包含字段頭)選項。這將使顯示在每個字段名稱下面的結(jié)果集都不包含字段頭。
HTML格式的數(shù)據(jù)字典
運行下面的腳本來生成數(shù)據(jù)字典,并保存結(jié)果到一個擴展名為“.htm”的文件中。
生成數(shù)據(jù)字典的示例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 ’’
FETCH NEXT FROM Tbls
INTO @TableName
WHILE @@FETCH_STATUS = 0
BEGIN
PRINT ’’
PRINT ’’
’
FETCH NEXT FROM Tbls
INTO @TableName
END
PRINT ’’
CLOSE Tbls
DEALLOCATE Tbls
這個腳本將被安排作為一個工作來運行,所以你不需要擔(dān)心要手動更新文檔。
因為你將文檔存儲在數(shù)據(jù)庫中,所以你不必擔(dān)心擁有多個拷貝并指出哪個是最新的。它還會與數(shù)據(jù)庫一起備份。
這個腳本不會添加擴展屬性,但是顯然你將丟失這些描述,所以花些時間將這些信息添加到你的環(huán)境中。
examda提示: 如果你將元數(shù)據(jù)存儲為擴展屬性,那么你可以使用SQL Server 2005在幾秒之內(nèi)為一個數(shù)據(jù)庫創(chuàng)建一個數(shù)據(jù)字典。SQL Server 2005 AdventureWorks示例數(shù)據(jù)庫包含了眾多擴展屬性,所以這個數(shù)據(jù)庫是一個很好的示例。在這篇文章里,我們將介紹兩個核心內(nèi)容。首先是一組腳本示例,它為表和字段添加擴展屬性。其次是生成HTML格式數(shù)據(jù)字典的T-SQL代碼。
示例腳本——sys.sp_addextendedproperty
下面是一個示例腳本,它添加擴展屬性到這個數(shù)據(jù)庫上。
為表和字段添加擴展屬性
/********** The following extended properties already exist in the AdventureWorks database. There is no need to run the script against the database in order for the remaining samples to work.
**********/
USE [AdventureWorks]
GO
--Script to add an Extended Property to the Table
EXEC sys.sp_addextendedproperty
@name=N’MS_Description’,
@value=N’Street address information for customers, employees, and vendors.’ ,
@level0type=N’SCHEMA’,
@level0name=N’Person’, --Schema Name
@level1type=N’TABLE’,
@level1name=N’Address’ --Table Name
GO
--Script to add an Extended Property to a column
EXEC sys.sp_addextendedproperty
@name=N’MS_Description’,
@value=N’First street address line.’ ,
@level0type=N’SCHEMA’,
@level0name=N’Person’, --Schema Name
@level1type=N’TABLE’,
@level1name=N’Address’,--Table Name
@level2type=N’COLUMN’,
@level2name=N’AddressLine1’--Column Name
Go可以通過右鍵單擊SSMS中的對象并選擇屬性來查看擴展屬性:
如果你的數(shù)據(jù)庫在擴展屬性中有數(shù)據(jù),那么你可以運行查詢來提取這個數(shù)據(jù)。在SQL Server管理套件中,選擇Tools | Options,并在Results to Text中不選“Include column headers in the result set”(在結(jié)果集中包含字段頭)選項。這將使顯示在每個字段名稱下面的結(jié)果集都不包含字段頭。
HTML格式的數(shù)據(jù)字典
運行下面的腳本來生成數(shù)據(jù)字典,并保存結(jié)果到一個擴展名為“.htm”的文件中。
生成數(shù)據(jù)字典的示例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 ’’
FETCH NEXT FROM Tbls
INTO @TableName
WHILE @@FETCH_STATUS = 0
BEGIN
PRINT ’’
PRINT ’
Column Name | ’Description | ’InPrimaryKey | ’IsForeignKey | ’DataType | ’Length | ’Numeric Precision | ’Numeric Scale | ’Nullable | ’Computed | ’Identity | ’Default Value | ’
’ + CAST(clmns.name AS VARCHAR(35)) + ’ | ’,’ + substring(ISNULL(CAST(exprop.value AS VARCHAR(255)),’’),1,250), substring(ISNULL(CAST(exprop.value AS VARCHAR(500)),’’),251,250) + ’ | ’,’ + CAST(ISNULL(idxcol.index_column_id, 0)AS VARCHAR(20)) + ’ | ’,’ + CAST(ISNULL( (SELECT 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)),’’) + ’ | ’
FETCH NEXT FROM Tbls
INTO @TableName
END
PRINT ’’
CLOSE Tbls
DEALLOCATE Tbls
這個腳本將被安排作為一個工作來運行,所以你不需要擔(dān)心要手動更新文檔。
因為你將文檔存儲在數(shù)據(jù)庫中,所以你不必擔(dān)心擁有多個拷貝并指出哪個是最新的。它還會與數(shù)據(jù)庫一起備份。
這個腳本不會添加擴展屬性,但是顯然你將丟失這些描述,所以花些時間將這些信息添加到你的環(huán)境中。