在管理扩展属性时,Server Management Studio 往往有点不直观,所以任何人都可以推荐一个可以改善这种情况的好工具。
我想做的一件事是拥有可以应用对象的模板,从而标准化应用于对象的属性的命名和内容。
在管理扩展属性时,Server Management Studio 往往有点不直观,所以任何人都可以推荐一个可以改善这种情况的好工具。
我想做的一件事是拥有可以应用对象的模板,从而标准化应用于对象的属性的命名和内容。
看看 Data Dictionary Creator,这是我编写的一个开源工具,可以更轻松地编辑扩展属性。它还包括以各种格式导出信息的能力。
您可能还考虑拥有一个很好的可重新运行的脚本,让您维护扩展的属性。系统存储过程可以很好地完成这项工作,但它们很痛苦,所以我用自己的存储过程包装它们,这样我就可以更轻松地处理它们。
例如,下面是一个针对列级扩展属性的存储过程,a) 检查扩展属性是否已经存在,b) 如果存在则删除它,c) 然后添加它。
这让我可以维护一个干净的可重新运行的(这对于自动构建过程至关重要)脚本,其中包含一个简单的衬里以添加扩展属性(仅限列级别 - 您需要修改此属性或为其他对象类型编写类似的属性) )。
这是存储过程:
IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo]. [snap_xpColumn_addUpdate]') AND type in (N'P', N'PC'))
DROP PROCEDURE [dbo].snap_xpColumn_addUpdate
GO
CREATE PROCEDURE [dbo].[snap_xpColumn_addUpdate]
@TableName NVARCHAR(255),
@ColumnName NVARCHAR(255),
@ExtPropName NVARCHAR(255),
@ExtPropValue NVARCHAR(255),
@SchemaOwner NVARCHAR(255) = 'dbo'
AS
IF EXISTS(SELECT * FROM ::fn_listextendedproperty(@ExtPropName,'SCHEMA',@SchemaOwner,
'TABLE',@TableName,'COLUMN',@ColumnName))
BEGIN
-- drop it
EXEC sys.sp_dropextendedproperty @name=@ExtPropName,
@level0type=N'SCHEMA',
@level0name=@SchemaOwner,
@level1type=N'TABLE',
@level1name=@TableName,
@level2type=N'COLUMN',
@level2name=@ColumnName
END
-- add it
EXEC sys.sp_addextendedproperty @name=@ExtPropName,
@value=@ExtPropValue,
@level0type=N'SCHEMA',
@level0name=@SchemaOwner,
@level1type=N'TABLE',
@level1name=@TableName,
@level2type=N'COLUMN',
@level2name=@ColumnName
GO