项目要做到可持续发展,需要有个好的文档体系,把数据库文档维护在数据库中是最合适不过的了。。。


这里提供2个存储过程,方便快捷查阅


-- 查看功能模块对应的表

-- 用法:ft Product

-- 执行后会输出所有含有Product的表名与表描述

CREATE PROCEDURE [dbo].[ft]

(

  @tableName AS VARCHAR(100) = ''

 )

AS

BEGIN


    IF @tableName = ''

    BEGIN

        SELECT  表名 = d.name ,

                表说明 = ISNULL(f.value, '')

        FROM    syscolumns a

                INNER  JOIN sysobjects d ON a.id = d.id

                                            AND d.xtype = 'U'

                                            AND d.name <> 'dtproperties'

                LEFT  JOIN sys.extended_properties f ON d.id = f.major_id

                                                        AND f.minor_id = 0

        WHERE   a.colorder = 1

        ORDER BY d.name;


    END;

    ELSE IF LEFT(@tableName,2) <> 't_'

    BEGIN

        SELECT  表名 = d.name ,

                表说明 = ISNULL(f.value, '')

        FROM    syscolumns a

                INNER  JOIN sysobjects d ON a.id = d.id

                                            AND d.xtype = 'U'

                                            AND d.name <> 'dtproperties'

                LEFT  JOIN sys.extended_properties f ON d.id = f.major_id

                                                        AND f.minor_id = 0

        WHERE   a.colorder = 1 AND d.name LIKE '%'+@tableName+'%'

        ORDER BY d.name;


    END;

    ELSE

    BEGIN

        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

                OR @tableName = ''

        ORDER BY a.id ,

                a.colorder;

    END;

END;

GO


-- 查看表对应的字段

-- 用法:tb t_Product_Detail

-- 执行后会输出 t_Product_Detail 表下的字段属性详情和描述

CREATE PROCEDURE [dbo].[tb]

(

  @tableName AS VARCHAR(100) = ''

 )

AS

BEGIN

    IF @tableName = ''

    BEGIN

        SELECT  表名 = d.name ,

                表说明 = ISNULL(f.value, '')

        FROM    syscolumns a

                INNER  JOIN sysobjects d ON a.id = d.id

                                            AND d.xtype = 'U'

                                            AND d.name <> 'dtproperties'

                LEFT  JOIN sys.extended_properties f ON d.id = f.major_id

                                                        AND f.minor_id = 0

        WHERE   a.colorder = 1

        ORDER BY d.name;

    END;

    ELSE

    BEGIN

        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

                OR @tableName = ''

        ORDER BY a.id ,

                a.colorder;

    END;

END;

GO