SQL Server 数据库对象的扩展属性
使用扩展属性,您可以添加文本(如描述性或指导性内容)、输入掩码和格式规则,将它们作为数据库中的对象或数据库自身的属性。例如,您可以将扩展属性添加到架构、架构的视图或视图中的列。由于扩展属性存储在数据库中,所有读取属性的应用程序都能以相同的方式评估对象。这有助于加强系统中所有程序对数据的处理方式的一致性。
扩展属性可以用于:
- 指定表、视图或列的标题。这样,应用程序便可以在显示该表、该视图或该列的信息的用户界面中使用同一标题。
- 为列指定输入掩码,以便应用程序可以在运行 Transact-SQL 语句之前验证数据。例如,可以在扩展属性中指定邮政编码或电话号码列的所需格式。
- 指定数据在列中的显示格式规则。
- 记录应用程序可显示给用户的特定数据库对象的描述。例如,这些描述可用在数据字典应用程序或报表中。
- 指定某列显示的大小和窗口位置。
我个人用得最多的是,在扩展属性中提供字段的描述,以便在生成数据库文档的时候有用
--定义扩展属性
在以下示例中,将扩展属性值 'Minimum inventory quantity.'
添加到 Production
架构所包含的 Product
表中的 SafetyStockLevel
列。
USE AdventureWorks; GO EXEC sys.sp_addextendedproperty @name = N'MS_DescriptionExample', @value = N'Minimum inventory quantity.', @level0type = N'SCHEMA', @level0name = Production, @level1type = N'TABLE', @level1name = Product, @level2type = N'COLUMN', @level2name = SafetyStockLevel; GO每个扩展属性都有用户定义的名称和值。扩展属性值是 sql_variant 值,最多可包含 7,500 个字节的数据。可以向一个对象添加多个扩展属性。
为了指定扩展属性,将 SQL Server 数据库中的对象分为三个级别:0、1 和 2。级别 0 是最高级别,并将其定义为数据库作用域包含的对象。级别 1 的对象包含在架构作用域或用户作用域中,而级别 2 的对象包含在级别 1 的对象中。可以为这些级别中的任一级别的对象定义扩展属性。
--查看数据库级别的扩展属性
USE AdventureWorks;
GO
SELECT objtype, objname, name, value
FROM fn_listextendedproperty(default, default, default, default, default, default, default);
GO
--查看某个架构中所有表的扩展属性
USE AdventureWorks;
GO
SELECT objtype, objname, name, value
FROM fn_listextendedproperty (NULL, 'schema', 'dbo', 'table', default, NULL, NULL);
GO
--查看整个数据库所有对象的扩展属性
USE AdventureWorks;
GO
SELECT class, class_desc, major_id, minor_id, name, value
FROM sys.extended_properties;
GO
--查看数据库表中所有列的扩展属性
USE AdventureWorks; GO SELECT major_id, minor_id, t.name AS [Table Name], c.name AS [Column Name], value AS [Extended Property] FROM sys.extended_properties AS ep INNER JOIN sys.tables AS t ON ep.major_id = t.object_id INNER JOIN sys.columns AS c ON ep.major_id = c.object_id AND ep.minor_id = c.column_id WHERE class = 1; GO
如果需要在管理工具中定义或者查看扩展属性,那么选中数据库对象(例如数据库,表,视图,列等等),在右键菜单中,找到"属性",然后就可以看到下面这样的窗口