今天有人問有沒有辦法查看表的注釋,或查詢所有表的注釋。這里所說的表或表字段等的注釋,其實是數據庫對象的擴展屬性。在MSSQL中,支持把一些注釋性的內容放到數據庫或數據庫對象中,增強可讀性,有助於日后的管理和維護工作。擴展屬性的內容可以通過SSMS添加、修改或刪除,也可以通過系統視圖查詢,通過執行相關的存儲過程來維護。
創建一張測試表:
IF OBJECT_ID(N'T8') IS NOT NULL BEGIN DROP TABLE T8 END GO CREATE TABLE T8 ( id INT NOT NULL, name NVARCHAR(100) ) GO
code-1
添加表的擴展屬性:在Object Explorer中找到新建的表,右鍵選擇屬性。
figure-1
點擊擴展屬性,即可進行添加、修改和刪除。
figure-2
添加字段的擴展屬性。
figure-3
字段屬性——描述,添加注釋內容。
figure-4
保存后,即可完成對字段擴展屬性的添加。可通過系統視圖sys.extended_properties進行查詢。
SELECT *,OBJECT_NAME(major_id) AS obj_name FROM sys.extended_properties
code-2
從下圖可看到,剛才在SSMS上添加的屬性已經被查詢出來。默認的擴展屬性名是MS_Description。
figure-5
系統視圖sys.extended_properties每個字段的詳細說明,可查閱SQL聯機從書。除了系統視圖,也可以通過函數fn_listextendedproperty查詢。
SELECT objtype, objname, name, value FROM fn_listextendedproperty(default, 'SCHEMA', 'dbo', 'TABLE', 'T8', default, default); SELECT objtype,objname,name,value FROM fn_listextendedproperty(default, 'SCHEMA', 'dbo', 'TABLE', 'T8', 'COLUMN', 'id'); SELECT objtype,objname,name,value FROM fn_listextendedproperty(default, 'SCHEMA', 'dbo', 'TABLE', 'T8', 'COLUMN', 'name');
code-3
figure-6
擴展屬性可以使用相關的存儲過程進行維護。再執行code-1的代碼,重建測試表,相關的屬性也會刪除。執行存儲過程sp_addextendedproperty 進行添加。存儲過程的參數使用,請查閱文檔,本文末尾提供鏈接。
EXEC sp_addextendedproperty @name = N'MS_Description', @value = N'This is a table description on [T8](2).', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'T8' GO EXEC sp_addextendedproperty @name = N'MS_Description', @value = N'This is a column description on [id](2).', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'T8', @level2type = N'COLUMN', @level2name = N'id' GO EXEC sp_addextendedproperty @name = N'MS_Description', @value = N'This is a column description on [name](2).', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'T8', @level2type = N'COLUMN', @level2name = N'name' GO
code-4
查詢sys.extended_properties,已經成功添加表和字段的擴展屬性。
figure-7
執行sp_dropextendedproperty刪除現有擴展屬性。
EXEC sp_dropextendedproperty @name = N'MS_Description', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'T8', @level2type = N'COLUMN', @level2name = N'name' GO
code-5
再查詢sys.extended_properties,字段name的擴展屬性已經被刪除。
figure-8
使用sp_updateextendedproperty更新擴展屬性。
EXEC sp_updateextendedproperty @name = N'MS_Description', @value = N'This is a column description on [id](3).', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'T8', @level2type = N'COLUMN', @level2name = N'id' GO
code-6
figure-9
不僅表可以添加擴展屬性,其他數據庫對象也可以,如數據庫,索引等。
USE AdventureWorks2008R2; GO SELECT *,OBJECT_NAME(major_id) AS obj_name FROM sys.extended_properties GO
code-7
figure-10
figure-11
參考文檔:
對數據庫對象使用擴展屬性:
https://technet.microsoft.com/zh-cn/library/ms190243%28v=sql.105%29.aspx
查看擴展屬性:
https://technet.microsoft.com/zh-cn/library/ms186989%28v=sql.105%29.aspx
sys.extended_properties:
https://technet.microsoft.com/zh-cn/library/ms177541%28v=sql.105%29.aspx
sp_addextendedproperty:
https://technet.microsoft.com/zh-cn/library/ms180047%28v=sql.105%29.aspx
sp_dropextendedproperty:
https://technet.microsoft.com/zh-cn/library/ms178595%28v=sql.105%29.aspx
sp_updateextendedproperty:
https://technet.microsoft.com/zh-cn/library/ms186885%28v=sql.105%29.aspx
fn_listextendedproperty:
https://technet.microsoft.com/zh-cn/library/ms179853%28v=sql.105%29.aspx