PgSQL、MySQL、SQLServer查询某张表的表结构

PgSQL、MySQL、SQLServer查询某张表的表结构

记录一下Pg SQL、MySQL、SQLServe查询某张表的表结构,方便更新表结构文档


PgSQL查询表结构

SELECT
    a.column_name AS 字段名称,
    udt_name AS 字段类型,
    (CASE
        WHEN COALESCE(character_maximum_length, -999) = -999 THEN numeric_precision
        ELSE character_maximum_length
    END)||(CASE
        WHEN udt_name IN ('numeric', 'decimal') THEN ','||numeric_scale::text
        ELSE '' end) AS 字段长度,
    
    CASE
        WHEN is_nullable = 'YES' THEN '√'
        ELSE ''
    END AS 是否可为空,
    CASE
        WHEN pk.constraint_name IS NOT NULL THEN '√'
        ELSE ''
    END AS 是否为主键,
    column_default AS 默认值,
		col_description(b.oid, a.ordinal_position) AS 字段说明
FROM
    information_schema.columns AS a
LEFT JOIN
    pg_class AS b ON a.table_name = b.relname
LEFT JOIN
    information_schema.key_column_usage AS pk ON a.table_name = pk.table_name AND a.column_name = pk.column_name
LEFT JOIN
    information_schema.table_constraints AS tc ON pk.constraint_name = tc.constraint_name
WHERE
    a.table_name = '表名'
ORDER BY
    a.table_schema,
    a.table_name,
    a.ordinal_position;

查询结果:
在这里插入图片描述


MySQL表结构程序

* MySQL 表结构查询是当前连接的所有数据库的表结构,所以要加上c.TABLE_SCHEMA ='dbname' 条件指定数据库名称,不加的话如果多个数据库有相同的表名也会查出来

SELECT
    c.COLUMN_NAME AS `字段名称`,
    c.DATA_TYPE AS `字段类型`,
    CASE
        WHEN c.CHARACTER_MAXIMUM_LENGTH IS NULL THEN CONCAT_WS(',', c.NUMERIC_PRECISION, c.NUMERIC_SCALE)
        ELSE CAST(c.CHARACTER_MAXIMUM_LENGTH AS CHAR)
    END AS `字段长度`,
    c.COLUMN_DEFAULT AS `默认值`,
    IF(c.IS_NULLABLE = 'YES', '√', '') AS `是否可为空`,
    IF(c.COLUMN_KEY = 'PRI', '√', '') AS `是否为主键`,
    IFNULL(c.COLUMN_COMMENT, '') AS `字段说明`
FROM
    INFORMATION_SCHEMA.COLUMNS c
WHERE
    c.TABLE_NAME = 'system_users' and c.TABLE_SCHEMA ='dbname'
ORDER BY
    c.ORDINAL_POSITION;

查询结果:
在这里插入图片描述


SQLServer查询表结构

SELECT
    c.COLUMN_NAME AS 字段名称,
    c.DATA_TYPE AS 字段类型,
   CAST(( CASE
        WHEN ISNULL(c.CHARACTER_MAXIMUM_LENGTH, -999) = -999 THEN c.NUMERIC_PRECISION
        ELSE  c.CHARACTER_MAXIMUM_LENGTH
    END) AS NVARCHAR(MAX)) + 
    CASE
        WHEN c.DATA_TYPE IN ('numeric', 'decimal') THEN ',' + CAST(ISNULL(c.NUMERIC_SCALE, 0) AS NVARCHAR(MAX))
        ELSE ''
    END AS 字段长度,
    ISNULL(c.COLUMN_DEFAULT, '') AS 默认值,
    case when ISNULL(c.IS_NULLABLE, '') = 'YES' then '√' else '' end AS 是否可为空,
    CASE
        WHEN ic.index_id IS NOT NULL THEN '√'
        ELSE ''
    END AS 是否为主键,
    ISNULL(ep.value, '') AS 字段说明
FROM
    INFORMATION_SCHEMA.COLUMNS c
LEFT JOIN
    sys.indexes i ON OBJECT_NAME(i.OBJECT_ID) = c.TABLE_NAME AND i.is_primary_key = 1
LEFT JOIN
    sys.index_columns ic ON i.OBJECT_ID = ic.OBJECT_ID AND i.index_id = ic.index_id AND ic.column_id = c.ORDINAL_POSITION
LEFT JOIN
    sys.extended_properties ep ON ep.major_id = OBJECT_ID(c.TABLE_SCHEMA + '.' + c.TABLE_NAME) AND ep.minor_id = c.ORDINAL_POSITION AND ep.name = 'MS_Description'
WHERE
    c.TABLE_NAME = '表名'
ORDER BY
    c.TABLE_SCHEMA,
    c.TABLE_NAME,
    c.ORDINAL_POSITION;

查询结果:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值