SQLServer存储过程自制数据字典

Posted 一只努力学习的程序猿

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQLServer存储过程自制数据字典相关的知识,希望对你有一定的参考价值。

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

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

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

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

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

/****** 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

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

 

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

--调用存储过程
EXEC dbo.sp_tableDict @tableName = \'tblApplicationAcceptance\' --指定表

效果如下:

 

 

 

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

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

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

 

欢迎关注订阅我的微信公众平台【熊泽有话说】,更多好玩易学知识等你来取
作者:熊泽-学习中的苦与乐
公众号:熊泽有话说
出处:https://www.cnblogs.com/xiongze520/p/10265821.html
创作不易,任何人或团体、机构全部转载或者部分转载、摘录,请在文章明显位置注明作者和原文链接。  

 

以上是关于SQLServer存储过程自制数据字典的主要内容,如果未能解决你的问题,请参考以下文章

SQL Server 2000 系统存储过程

sqlserver存储过程如何定期删除表中的数据 求代码

Java调用SQL Server的存储过程详解(转)

sql server 存储过程如何调用存储过程

如何写sqlserver2000存储过程?用于批量录入数据,求解

sqlserver存储过程怎么调试