關於數據庫對象的擴展屬性


今天有人問有沒有辦法查看表的注釋,或查詢所有表的注釋。這里所說的表或表字段等的注釋,其實是數據庫對象的擴展屬性。在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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM