暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

SQLServer存储过程应用一:自制数据字典

熊泽有话说 2021-07-08
826

      

 SQLServer存储过程应用一:自制数据字典。

   

       我们开发中接手别人的代码,遇到没注释、没字段说明、没字典释语的就很头疼,每段代码的逻辑思维、应用场景、表示内容都不清楚,需要跟踪代码一段一段的调试,很费时费力,有的数据表有100多字段,靠猜是不靠谱的,我们平时写的时候也要养成良好的编码习惯。

       基于SqlServer存储过程的应用,我们来制作一个查询数据字典的方法,可以快速查询数据库数据字典。


01

 编写存储过程



      不会编写的小伙伴可以去看一下之前的文章,我们有介绍怎么编写,或者直接复制下面的存储过程执行即可。

       记住,拷贝以后需要先执行创建存储过程。



    /****** Object:  StoredProcedure [dbo].[sp_tableDict] author:熊泽  Script Date: 2021/4/14 16:25:49 ******/


    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    --调用方式:EXEC dbo.sp_tableDict 'a_Students' --a_Students 是数据表名称
    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






    02


    调用存储过程


    创建完后就可以直接调用了。

      --执行存储过程查看表字段说明
      EXEC dbo.sp_tableDict 'a_Students' --a_Students 是数据表名称

      调用后显示如下图:




      注意,这里有个前提,表字段说明需要创建表的时候一同创建,如下:






      SQLServer存储过程应用一:自制数据字典我们就介绍到这里吧,拜拜!





      文章转载自熊泽有话说,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

      评论