欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

SQLServer存储过程自制数据字典

程序员文章站 2022-04-11 21:20:57
相信很多小伙伴都对【数据字典】很头疼。 小编刚入职的时候,老大丢一个项目过来,就一个设计文档,数据字典木有,字段说明木有, 全部都需要靠“联系上下文”来猜。所以小伙伴门一定要养成说明字段的习惯哦。 说明字段后我们无需特意建立数据字典,直接建立一个存储过程就可以查询字段意义了。 存储过程建立如下,小伙 ......

相信很多小伙伴都对【数据字典】很头疼。

小编刚入职的时候,老大丢一个项目过来,就一个设计文档,数据字典木有,字段说明木有,

全部都需要靠“联系上下文”来猜。所以小伙伴门一定要养成说明字段的习惯哦。

说明字段后我们无需特意建立数据字典,直接建立一个存储过程就可以查询字段意义了。

存储过程建立如下,小伙伴们直接拷贝执行就行了。

/****** object:  storedprocedure [dbo].[sp_tabledict]    script date: 2019/1/14 10:49:40 ******/
set ansi_nulls on
go
set quoted_identifier on
go
create procedure [dbo].[sp_tabledict]
(
    @tablename as varchar(100)
)
    --@parameter_name as scalar_data_type ( = default_value ), ...
-- with encryption, recompile, execute as caller|self|owner| 'user_name'
as
select  表名 = case when a.colorder = 1 then d.name
                  else ''
             end ,
        表说明 = case when a.colorder = 1 then isnull(f.value, '')
                   else ''
              end ,
        字段序号 = a.colorder ,
        字段名 = a.name ,
        标识 = case when columnproperty(a.id, a.name, 'isidentity') = 1 then '√'
                  else ''
             end ,
        主键 = case when exists ( select  1
                                from    sysobjects
                                where   xtype = 'pk'
                                        and name in ( select  name
                                                      from    sysindexes
                                                      where   indid in ( select indid
                                                                         from   sysindexkeys
                                                                         where  id = a.id
                                                                                and colid = a.colid ) ) ) then '√'
                  else ''
             end ,
        类型 = b.name ,
        占用字节数 = a.length ,
        长度 = columnproperty(a.id, a.name, 'precision') ,
        小数位数 = isnull(columnproperty(a.id, a.name, 'scale'), 0) ,
        允许空 = case when a.isnullable = 1 then '√'
                   else ''
              end ,
        默认值 = isnull(e.text, '') ,
        字段说明 = isnull(g.[value], '')
from    syscolumns a
        left  join systypes b
        on a.xtype = b.xusertype
        inner  join sysobjects d
        on a.id = d.id
           and d.xtype = 'u'
           and d.name <> 'dtproperties'
        left  join syscomments e
        on a.cdefault = e.id
        left  join sys.extended_properties g
        on a.id = g.major_id
           and a.colid = g.minor_id
        left  join sys.extended_properties f
        on d.id = f.major_id
           and f.minor_id = 0
where   d.name = @tablename
order by a.id ,
        a.colorder

我们新建表字段的时候顺带说明当前字段是什么意思,如下图

SQLServer存储过程自制数据字典

 

字典说明写好后我们调用之前写好的存储过程,

--调用存储过程
exec dbo.sp_tabledict @tablename = 'tblapplicationacceptance' --指定表

效果如下:

 

SQLServer存储过程自制数据字典

 

 

这样我们就无需建立数据字典,只需要写好字典说明即可。

对于别人写好了说明,没有数据字典的小伙伴们也可以直接进行字段意义查看哦。

当然,做为一个合格的程序员,设计文档和数据字典是必须的,我们要为后来者节省时间,更容易理解数据结构。