SqlServer stored procedure generates Html dictionary table

Uses: By creating a sql stored procedure, execute the created stored procedure in the database, and put the html code output by the stored procedure into Notepad, which is a complete data dictionary display form. It is convenient for developers to view the data table structure.
insert image description here

Specific steps:
1: First open the database to generate a dictionary, right-click on the table name properties
insert image description here

2: Click the extended attribute, fill in the key value, which is the table name and the Chinese meaning of the table name
insert image description here
4: After setting the extended attribute of the table, click OK to close, then right-click the table name, click Design
insert image description here
5: In the design interface, select the table field, as The [Description] attribute of each table field is filled with the Chinese meaning of the field (note: the description of each field must be written, if not written, the data dictionary generated later will not have the current field).
insert image description here
6: Create a stored procedure, the use of this stored procedure (generate data in Html format for the table), attach the stored procedure sql [Note: This stored procedure can be used only by modifying its own database table name, change test2 to Your own database name, stored procedure does not need to be modified elsewhere, of course you can also change the stored procedure according to your needs]

USE [test2]
GO

/****** Object:  StoredProcedure [dbo].[CreateDatabaseDictionarieHtml]    Script Date: 06/11/2021 16:01:27 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

-- =============================================
-- Author:        <NS>
-- Create date: <2021-6-11>
-- Description:    <生成数据库字典>
-- =============================================
create PROCEDURE [dbo].[CreateDatabaseDictionarieHtml]

AS


BEGIN
    DECLARE @TableName nvarchar(35),@htmls varchar(8000)
    DECLARE @字段名称 VARCHAR(200)
    DECLARE @类型  VARCHAR(200)
    DECLARE @长度 VARCHAR(200)
    DECLARE @数值精度 VARCHAR(200)
    DECLARE @小数位数 VARCHAR(200)
    DECLARE @默认值 VARCHAR(200)
    DECLARE @允许为空 VARCHAR(200)
    DECLARE @外键 VARCHAR(200)
    DECLARE @主键 VARCHAR(200)
    DECLARE @描述 VARCHAR(200)
    
    SET NOCOUNT ON;

    DECLARE Tbls CURSOR
    FOR
        Select distinct Table_name
        FROM INFORMATION_SCHEMA.COLUMNS
        order by Table_name
    OPEN Tbls
        PRINT '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">'
        PRINT '<html xmlns="http://www.w3.org/1999/xhtml">'
        PRINT '    <head>'
        PRINT '        <title>xxxx管理系统-数据库字典</title>'
        PRINT '        <style type="text/css">'
        PRINT '            body{margin:0; font:11pt "arial", "微软雅黑"; cursor:default;}'
        PRINT '            .tableBox{margin:10px auto; padding:0px; width:1000px; height:auto; background:#FBF5E3; border:1px solid #45360A}'
        PRINT '            .tableBox h3 {font-size:12pt; height:30px; line-height:30px; background:#45360A; padding:0px 0px 0px 15px; color:#FFF; margin:0px; text-align:left }'
        PRINT '            .tableBox table {width:1000px; padding:0px }'
        PRINT '            .tableBox th {height:25px; border-top:1px solid #FFF; border-left:1px solid #FFF; background:#F7EBC8; border-right:1px solid #E0C889; border-bottom:1px solid #E0C889 }'
        PRINT '            .tableBox td {height:25px; padding-left:10px; border-top:1px solid #FFF; border-left:1px solid #FFF; border-right:1px solid #E0C889; border-bottom:1px solid #E0C889 }'
        PRINT '        </style>'
        PRINT '    </head>'
        PRINT '    <body>'
    FETCH NEXT FROM Tbls INTO @TableName
    WHILE @@FETCH_STATUS = 0
    BEGIN
        Select @htmls = '        <h3>' + @TableName + ' : '+ CAST(Value as varchar(1000)) + '</h3>'
        FROM sys.extended_properties AS A
        WHERE A.major_id = OBJECT_ID(@TableName)     and minor_id = 0
	  
        PRINT '        <div class="tableBox">'
        PRINT @htmls
        PRINT '            <table cellspacing="0">'
        PRINT '                <tr>'
        PRINT '                    <th>字段名称</th>'
        PRINT '                    <th>类型</th>'
        PRINT '                    <th>长度</th>'
        PRINT '                    <th>数值精度</th>'
        PRINT '                    <th>小数位数</th>'
        PRINT '                    <th>默认值</th>'
        PRINT '                    <th>允许为空</th>'
        PRINT '                    <th>外键</th>'
        PRINT '                    <th>主键</th>'
        PRINT '                    <th>描述</th>'
        PRINT '                </tr>'
        
        DECLARE TRows CURSOR
        FOR
            SELECT
            '                    <td>' + CAST(clmns.name AS VARCHAR(35)) + '</td>',
            '                    <td>' + CAST(udt.name AS CHAR(15)) + '</td>' ,
            '                    <td>' + CAST(CAST(CASE WHEN typ.name IN (N'nchar', N'nvarchar') AND clmns.max_length <> -1 THEN clmns.max_length/2 ELSE clmns.max_length END AS INT) AS VARCHAR(20)) + '</td>',
            '                    <td>' + CAST(CAST(clmns.precision AS INT) AS VARCHAR(20)) + '</td>',
            '                    <td>' + CAST(CAST(clmns.scale AS INT) AS VARCHAR(20)) + '</td>',
            '                    <td>' + isnull(CAST(cnstr.definition AS VARCHAR(20)),'') + '</td>',
            '                    <td>' + CAST(clmns.is_nullable AS VARCHAR(20)) + '</td>' ,
            '                    <td>' + CAST(clmns.is_computed AS VARCHAR(20)) + '</td>' ,
            '                    <td>' + CAST(clmns.is_identity AS VARCHAR(20)) + '</td>' ,
            '                    <td>' + ISNULL(CAST(exprop.value AS VARCHAR(500)),'') + '</td>'
            FROM sys.tables AS tbl 
            INNER JOIN sys.all_columns AS clmns ON clmns.object_id=tbl.object_id
            LEFT OUTER JOIN sys.indexes AS idx ON idx.object_id = clmns.object_id AND 1 =idx.is_primary_key
            LEFT OUTER JOIN sys.index_columns AS idxcol ON idxcol.index_id = idx.index_id AND idxcol.column_id = clmns.column_id AND idxcol.object_id = clmns.object_id AND 0 = idxcol.is_included_column
            LEFT OUTER JOIN sys.types AS udt ON udt.user_type_id = clmns.user_type_id
            LEFT OUTER JOIN sys.types AS typ ON typ.user_type_id = clmns.system_type_id AND typ.user_type_id = typ.system_type_id
            LEFT JOIN sys.default_constraints AS cnstr ON cnstr.object_id=clmns.default_object_id
            LEFT OUTER JOIN sys.extended_properties exprop ON exprop.major_id = clmns.object_id AND exprop.minor_id = clmns.column_id AND exprop.name = 'MS_Description'
            WHERE (tbl.name = @TableName and exprop.class = 1) --I don't wand to include comments on indexes
            ORDER BY clmns.column_id ASC
        OPEN TRows
        FETCH NEXT FROM TRows INTO @字段名称,@类型,@长度,@数值精度,@小数位数,@默认值,@允许为空,@外键,@主键,@描述
        WHILE @@FETCH_STATUS = 0
        BEGIN
            PRINT '                <tr>'
            PRINT @字段名称
            PRINT @类型
            PRINT @长度
            PRINT @数值精度
            PRINT @小数位数
            PRINT @默认值
            PRINT @允许为空
            PRINT @外键
            PRINT @主键
            PRINT @描述
            PRINT '                </tr>'
            FETCH NEXT FROM TRows INTO @字段名称,@类型,@长度,@数值精度,@小数位数,@默认值,@允许为空,@外键,@主键,@描述
        END
        CLOSE TRows
        DEALLOCATE TRows

        PRINT '            </table>'
        PRINT '        </div>'
    FETCH NEXT FROM Tbls INTO @TableName
    END
        PRINT '    </body>'
        PRINT '</html>'
    CLOSE Tbls
    DEALLOCATE Tbls
END
GO



7: Create the stored procedure, then execute the stored procedure
Exec CreateDatabaseDictionarieHtml
8: Copy all the html codes output by executing the stored procedure ctrl+a, then create a notepad on the desktop, and put all the copied html codes into the notepad Go to
insert image description here
9: Change the suffix of Notepad to html, and it is already ok here.
insert image description here

Then you can see a data dictionary in the form of a web page
insert image description here

Guess you like

Origin blog.csdn.net/qq_37213281/article/details/117820489