今天有人问有没有办法查看表的注释,或查询所有表的注释。这里所说的表或表字段等的注释,其实是数据库对象的扩展属性。在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