1. 程式人生 > 資料庫 >sql批量生成showdocs資料字典的md文件

sql批量生成showdocs資料字典的md文件

-- sql批量生成showdocs資料字典的md文件
--批量獲取表備註

-- 表名,替換成需要的表名
DECLARE @TableList TABLE (ID INT IDENTITY(1,1), TableName NVARCHAR(256))
INSERT INTO @TableList(TableName)VALUES
('CompanyCertifyDatas'),
('CompanyXCXRegistrationDatas'),
('CompanyXCXRegistrationTracks'),
('CompanyXCXRegistrationWeixinLogs'),
('WeixinOpenReturnCodes')

CREATE TABLE #FieldDescripts
(
    FieldName NVARCHAR(MAX),
    PrimaryKey NVARCHAR(MAX),
    DataType NVARCHAR(MAX),
    FieldLength NVARCHAR(MAX),
    NeedNull NVARCHAR(MAX),
    DefaultValue NVARCHAR(MAX),
    Description NVARCHAR(MAX)
)

DECLARE @Count INT=(SELECT COUNT(1) FROM @TableList)
DECLARE @ID INT=1
WHILE @ID<=@Count
BEGIN
    DECLARE @TableName NVARCHAR(MAX)=(SELECT TableName FROM @TableList WHERE ID=@ID)

    DECLARE @TableDescription NVARCHAR(MAX)
    SELECT TOP(1) @TableDescription=ISNULL(CONVERT(NVARCHAR(MAX),g.[value]),'')
    FROM sys.tables a left join sys.extended_properties g ON (a.object_id = g.major_id AND g.minor_id = 0)
    WHERE a.name=@TableName

	INSERT INTO #FieldDescripts VALUES('# '+@TableName,'','','','','','')
	INSERT INTO #FieldDescripts VALUES('- ' + @TableDescription,'','','','','','')
	INSERT INTO #FieldDescripts VALUES('','','','','','','')
    INSERT INTO #FieldDescripts VALUES('|欄位名','|主鍵','| 型別','| 長度','| 允許空','| 預設值','| 欄位說明|')
    INSERT INTO #FieldDescripts VALUES('|:-------','|:-------','|:-------','|:-------','|:-------','|:-------','|:-------|')
    INSERT INTO #FieldDescripts
    SELECT 
        欄位名     = '|' + a.name , 
        主鍵       = '|' + case when exists(SELECT 1 FROM sysobjects where xtype='PK' and parent_obj=a.id 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,
        長度       = '|' + CONVERT(NVARCHAR(MAX),COLUMNPROPERTY(a.id,a.name,'PRECISION')),
        允許空     = '|' + case when a.isnullable=1 then '√' else '×' end,
        預設值     = '|' + ISNULL(e.text,''),
        欄位說明   = '|' + CONVERT(NVARCHAR(MAX),ISNULL(g.[value],'')) + '|'
    FROM 
        syscolumns a left join 
        systypes b on a.xusertype=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
    INSERT INTO #FieldDescripts VALUES('','','','','','','')
	INSERT INTO #FieldDescripts VALUES('','','','','','','')
    SET @ID=@ID+1
END 
SELECT * FROM #FieldDescripts 
DROP TABLE #FieldDescripts