SQL获取表结构

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/slwsss/article/details/84565536

mysql

select a.table_name,a.COLUMN_NAME name,a.DATA_TYPE type,a.COLUMN_DEFAULT defaultValue,
b.table_comment table_description,a.COLUMN_COMMENT description,
a.CHARACTER_MAXIMUM_LENGTH as length,a.NUMERIC_SCALE as scale,a.NUMERIC_PRECISION 'precision',
a.ORDINAL_POSITION sort,
(case when a.column_key='PRI' then 1 else 0 end) isKey,
(case when (a.column_key='PRI' or a.column_key='UNI') and a.EXTRA='auto_increment' then 1 else 0 end) isId,
(case when a.IS_NULLABLE='yes' or a.IS_NULLABLE=1 then 1 else 0 end) as allowNull
from information_schema.columns a
left join information_schema.tables b on b.TABLE_TYPE='BASE TABLE' and b.TABLE_SCHEMA=a.TABLE_SCHEMA and b.table_name=a.table_name
where a.table_schema='`+ dbName +`'
order by a.TABLE_NAME,a.ORDINAL_POSITION

mssql

SELECT 
    table_name/*表名*/       = d.name,
    table_description/*表说明*/     = f.value,
    sort/*字段序号*/   = a.colorder,
    name/*字段名*/     = a.name,
    isId/*标识*/       = case when COLUMNPROPERTY( a.id,a.name,'IsIdentity')=1 then convert(bit,1) else convert(bit,0) end,
    isKey/*主键*/       = 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 convert(bit,1) else convert(bit,0) end,
    type/*类型*/       = b.name,
    length/*占用字节数*/ = a.length,
    precision/*长度*/       = COLUMNPROPERTY(a.id,a.name,'PRECISION'),
    scale/*小数位数*/   = isnull(COLUMNPROPERTY(a.id,a.name,'Scale'),0),
    allowNull/*允许空*/    = case when a.isnullable=1 then CONVERT(bit,1) else CONVERT(bit,0) end,
    defaultValue/*默认值*/     = e.text,
    description/*字段说明*/   = 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' 
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
order by d.name,a.id,a.colorder

----视图---
select a.table_name,a.COLUMN_NAME name,a.DATA_TYPE type,a.COLUMN_DEFAULT defaultValue,
allowNull=case when a.IS_NULLABLE='yes' then CONVERT(bit,1) else CONVERT(bit,0) end,
length=a.CHARACTER_MAXIMUM_LENGTH,precision=a.NUMERIC_PRECISION,scale=a.NUMERIC_SCALE
from INFORMATION_SCHEMA.COLUMNS a
join INFORMATION_SCHEMA.VIEWS b on b.TABLE_NAME=a.TABLE_NAME
order by b.TABLE_NAME,a.ORDINAL_POSITION

sqlite

    var tables = db.query(`select name,sql from sqlite_master where type='table'`);
    for (var tb of tables) {
        var fs = db.query('pragma table_info(' + tb.name + ')');
        tb.fields = fs.map(p => { return { table_name: tb.name, name: p.name, type: p.type, isKey: !!p.pk, allowNull: !!!p.notnull, defaultValue: p.dflt_value, isId: new RegExp('\\[' + p.name + '\\][^,]+?AUTOINCREMENT', 'ig').test(tb.sql) } });
        delete tb.sql;
    }
    console.log(JSON.stringify(tables));

猜你喜欢

转载自blog.csdn.net/slwsss/article/details/84565536
今日推荐