通过扩展属性为SqlServer的索引添加注释信息

在Sqlserver数据库中,我们可以为字段添加注释信息,这样的好处是方便查看各个字段的含义。
而索引没有默认的地方让你加注释信息,其实通过给索引添加扩展属性,也可以达到这个目的。


选中一个索引:
属性,扩展属性,在表格的名称,值里分别加上:"说明", "这个索引的实际用处" 即可。

如果一个索引同时做了几件事,可以这样添加注释:
(1)插入数据时,根据date+code判断指定的数据是否存在 (2)后台根据date统计一段时间的汇总数据

这样当别人不清楚一个索引的作用时,只要看一下该索引的扩展属性即可。

如果要查看一个数据库里的索引注释列表可以这样查询:

select
      
object_name(major_id) as table_name,
      (select name from sys.indexes where object_id = major_id and index_id = minor_id) as index_name,
      name,
      value
from sys.extended_properties
where class_desc = 'INDEX'

在开发过程中,我们一般会在开发数据库上,指定各个索引的注释,如果要把这儿的注释同步到生产服务器,可以通过脚本来做:
EXEC sp_addextendedproperty @level0type=N'SCHEMA'@level0name=N'dbo',  @level1type=N'TABLE'@level2type=N'INDEX'@level1name=N'表名'@level2name=N'索引名'@name=N'说明'@value=N'索引的实际用处'

更新:sp_addextendedproperty
删除:sp_dropextendedproperty

调用这儿的 sp_ 存储过程可以完成任务,但稍微有点繁琐,这时可以自己创建一个存储过程,方便给索引添加注释信息:
-----------------------------------------------------
-- 给指定表的指定索引设置扩展属性(默认的扩展属性名为:'说明'),方便为索引添加注释
----------------------------------------------------
ALTER PROCEDURE [dbo].[SetIndexDesc]
    
@tablename    nvarchar(200),
    
@indexname    nvarchar(200),
    
@descvalue    nvarchar(500)
AS
BEGIN
      
---先检查索引上是否存在注释信息,如果存在,先删除
      if exists (
            
select * from sys.extended_properties
            
where class_desc = 'INDEX' and object_name(major_id) = @tablename
                 
and (select name from sys.indexes where object_id = major_id and index_id = minor_id) = @indexname
      ) begin
            
EXEC sp_dropextendedproperty N'说明', N'SCHEMA', N'dbo', N'TABLE'@tablename , N'INDEX'@indexname;
      
end

      
---在索引上创建注释信息
      EXEC sp_addextendedproperty
                  
@level0type=N'SCHEMA',
                  
@level0name=N'dbo',
                  
@level1type=N'TABLE',
                  
@level2type=N'INDEX',
                  
@level1name=@tablename,
                  
@level2name=@indexname,
                  
@name=N'说明',
                  
@value=@descvalue
END

调用时:
exec SetIndexDesc '表名''索引名', N'注释信息'

如果需要把开发数据库的索引注释列表同步到生产服务器,可以这样做:
select 'exec SetIndexDesc ''' + object_name(major_id) + '''''' (select name from sys.indexes where object_id = major_id and index_id = minor_id) + ''', N''' + convert(nvarchar(500), value) + ''''
from sys.extended_properties
where class_desc = 'INDEX' and name = N'说明'

把输出的脚本列表,在生产服务器上执行一下即可。

说明:这儿的脚本在SqlServer2005上测试通过。
 

posted on 2011-08-01 14:12  ji yang  阅读(2148)  评论(0编辑  收藏  举报

导航