24h購物| | PChome| 登入
2011-01-19 16:54:18| 人氣5,482| 回應1 | 上一篇 | 下一篇

取得 MS SQL 欄位描述內容

推薦 0 收藏 0 轉貼0 訂閱站台

最近很想整理去客戶那邊的案子的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_ownerdb_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)

以下為結果集:



台長: nut
人氣(5,482) | 回應(1)| 推薦 (0)| 收藏 (0)| 轉寄
全站分類: 不分類 | 個人分類: 技術 |
此分類下一篇:[技術]定期自動備份的BAT檔寫法
此分類上一篇:[技術]關於basp二三事

春藥
2020-01-12 01:35:55
是 (若未登入"個人新聞台帳號"則看不到回覆唷!)
* 請輸入識別碼:
請輸入圖片中算式的結果(可能為0) 
(有*為必填)
TOP
詳全文