最近很想整理去客戶那邊的案子的Schema, 因為舊有的文件太古老了, 維護起來蠻痛苦的.
用了同事提供的Script_to_generate_DB_Document_Version_1.1.sql, 可以順利方便的產出schema來,
很好用, 但是, 因為Table欄位都是英文的, 要看得懂必須在資料表設計那邊, 為每個欄位加上中文描述.
加上中文描述後, 再用Script_to_generate_DB_Document_Version_1.1.sql 產生出的schema文件就自動加上中文描述了, 傑克! 這真是太神奇了~!
但是這就引發我的好奇心啦~! 那那 這個描述到底是存在MS SQL的哪邊呢?
用"SQL 欄位描述"當關鍵字去查, 找到了孤影大大的文章
原來, 關鍵要用fn_listextendedproperty 這個FUNCTION阿~
------------------以下為MS SQL 2000說明文件 對於它的說明----------------------
fn_listextendedproperty
傳回資料庫物件的擴充屬性值
語法
fn_listextendedproperty (
{ default | [ @name = ]
'property_name' | NULL }
, { default | [
@level0type = ] 'level0_object_type' | NULL
}
, { default | [ @level0name = ]
'level0_object_name' | NULL }
, { default | [
@level1type = ] 'level1_object_type' | NULL
}
, { default | [ @level1name = ]
'level1_object_name' | NULL }
, { default | [
@level2type = ] 'level2_object_type' | NULL
}
, { default | [ @level2name = ]
'level2_object_name' | NULL }
)
引數
{default|[
@name =]
'property_name'|NULL}
為屬性名稱。 property_name 的資料型別為 sysname。有效的輸入可為預設、NULL
或屬性名稱。
{default|[@level0type =]
'level0_object_type'|NULL}
使用者或使用者自訂型別。level0_object_type 的資料型別為
varchar(128),預設值為 NULL。有效的輸入值為 USER、TYPE、預設 及 NULL。
{default|[@level0name =]
'level0_object_name'|NULL}
指定的層級 0 物件型別名稱。level0_object_name 的資料型別為
sysname,預設值為 NULL。有效的輸入可為預設、NULL 或物件名稱。
{default|[@level1type =]
'level1_object_type'|NULL}
層級 1 物件的型別。level1_object_type 的資料型別為
varchar(128),預設值為 NULL。有效的輸入為
TABLE、VIEW、PROCEDURE、FUNCTION、DEFAULT、RULE、預設以及 NULL。
附註 預設對應至 NULL 而
'default' 則是對應至物件型別的 DEFAULT。
{default|[@level1name =]
'level1_object_name'|NULL}
指定的層級 1 物件型別名稱。level1_object_name 的資料型別為
sysname,預設值為 NULL。有效的輸入可為預設、NULL 或物件名稱。
{default|[@level2type =]
'level2_object_type'|NULL}
層級 2 物件的型別。level2_object_type 的資料型別為
varchar(128),預設值為 NULL。有效的輸入為 COLUMN、
PARAMETER、INDEX、CONSTRAINT、TRIGGER、DEFAULT、預設 (對應至 NULL) 以及 NULL。
{default|[@level2name =]
'level2_object_name'|NULL}
指定的層級 2 物件型別名稱。level2_object_name 的資料型別為
sysnam,預設值為 NULL。有效的輸入可為預設、NULL 或物件名稱。
傳回的資料表
這是由 fn_listextendedproperty所傳回的資料表格式。
資料行名稱 |
資料型別 |
objtype |
sysname |
objname |
sysname |
name |
sysname |
value |
sql_variant |
如果傳回的資料表為空值,可能是物件沒有擴充屬性,或使用者沒有權限列出物件的擴充屬性。
備註
擴充屬性不可用在系統物件上。
如果 property_name 的值為 NULL 或預設,fn_listextendedproperty 會傳回物件的所有屬性。
若有指定物件型別,且對應物件名稱的值為 NULL 或預設,fn_listextendedproperty 會傳回指定的所有物件型別的全部擴充屬性。
物件是根據層級加以判別,0 為最高層級,而 2 為最低層級。如果已指定較低層級物件 (1 或 2 層級) 的型別或名稱,父物件型別與名稱不可給予 NULL
或預設值。否則,函數會傳回錯誤。
列出某層級物件型別的擴充屬性權限有以下數種。
- 就 0 層級物件而言,如果該人員是 0 層級名稱中指定的使用者,或使用者為 db_owner 與 db_ddladmin
的固定資料庫角色成員,使用者可以列出擴充屬性為 "user" 的類型。
- 所有的使用者可以使用 0 層級的 "type" 物件型別列出擴充屬性。
- 就 1 層級物件而言,如果使用者是物件擁有者,或如果使用者對該物件具有權限,使用者可以列出任何有效類型值的擴充屬性
- 就 2 層級物件而言,如果目前使用者具有父物件的權限 (1 和 0 層級),使用者可以列出任何有效類型值的擴充屬性。
範例
此範例列出資料庫的所有擴充屬性。
SELECT *
FROM ::fn_listextendedproperty(NULL, NULL, NULL, NULL, NULL, NULL, NULL)
- 或 -
SELECT *
FROM ::fn_listextendedproperty(default, default, default, default, default, default, default)
此範例列出 'T1' 資料表所有資料行的全部擴充屬性。
CREATE table T1 (id int , name char (20))
EXEC sp_addextendedproperty 'caption', 'Employee ID', 'user', dbo, 'table', 'T1', 'column', id
EXEC sp_addextendedproperty 'caption', 'Employee Name', 'user', dbo, 'table', 'T1', 'column', name
SELECT *
FROM ::fn_listextendedproperty (NULL, 'user', 'dbo', 'table', 'T1', 'column', default)
以下為結果集:
文章定位: