利用DB字典表查詢表格字段定義

--------------------------------------------------------------------------------------------------
-- 1
SQL Server表結構查詢SQL
--------------------------------------------------------------------------------------------------
    SELECT
        SO.name
表名,
        SC.name
表列名,
        ST.name
類型,
        SC.length
長度,
        case when exists(SELECT 1 FROMsysobjects where xtype='PK' and name in (SELECT name FROM sysindexes WHEREindid in(SELECT indid FROM sysindexkeys WHERE id = SC.id AND colid=SC.colid)))then '√' else '' end
主鍵,
        case when SC.isnullable=1 then'√'else '' end
允許爲空,
        SC.colid
索引,
        SC.colorder
字段序號
    FROM
        sysobjects   SO, --
對象表
        syscolumns   SC, --
列名錶
        systypes    ST  --
數據類型表
    WHERE         
      SO.id = SC.id  
      AND   SO.xtype = 'U'   --
類型U表示表,V表示視圖
      AND   SO.status >=0    --
非系統的臨時表
      AND   SC.xtype = ST.xusertype
      AND   SO.name like 'BMP%'
    ORDER BY
        SO.name,SC.name         --
按表名、列名排序

-- ------------------------------------------------------------------------------------------------
-- 2.
如果從 ms sql 數據庫中用一個複雜的sql語句,提取一個表的所有字段名稱、類型、約束?
--------------------------------------------------------------------------------------------------

--
表結構
SELECT
       
表名=case when a.colorder=1 thend.name else '' end,
       
字段序號=a.colorder,
       
字段名=a.name,
       
標識=case when COLUMNPROPERTY(a.id,a.name,'IsIdentity')=1 then '√'else '' end,
       
主鍵=case when exists(SELECT 1 FROMsysobjects 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 ona.xtype=b.xusertype
        inner join sysobjects d ona.id=d.id  and d.xtype='U' and  d.name<>'dtproperties'
        left join syscomments e ona.cdefault=e.id
        left join sysproperties g ona.id=g.id and a.colid=g.smallid 
--where d.name='
要查詢的表'    --如果只查詢指定表,加上此條件
order by a.id,a.colorder

--
表的外鍵約束
SELECT
表對象ID=b.fkeyid
        ,
表名稱=object_name(b.fkeyid)
        ,
引用的列ID=b.fkey
        ,
引用的列名=(SELECT name FROM syscolumnsWHERE colid=b.fkey AND id=b.fkeyid)
        ,
引用的表對象ID=b.rkeyid
        ,
引用的表名=object_name(b.rkeyid)
        ,
已引用的列ID=b.rkey
        ,
已引用的列名=(SELECT name FROMsyscolumns WHERE colid=b.rkey AND id=b.rkeyid)
FROM sysobjects a
        join sysforeignkeys b ona.id=b.constid
        join sysobjects c on a.parent_obj=c.id
where a.xtype='f' AND c.xtype='U'

--------------------------------------------------------------------------------------------------
-- 3
PostgreSQL表結構查詢SQL
--------------------------------------------------------------------------------------------------
select
    a.table_name,
    a.column_name,
    a.is_nullable,
    a.udt_name,
    a.character_maximum_length,
    b.constraint_name,
    c.constraint_type as pk_type,
    d.indexrelname as index_name
from
    information_schema.columns a
    LEFT JOIN
        information_schema.KEY_COLUMN_USAGEb
        ON a.TABLE_NAME = b.table_name anda.column_name = b.column_name
    LEFT JOIN
        information_schema.TABLE_CONSTRAINTSc
        ON b.table_name = c.table_name andb.constraint_name =c.constraint_name
    LEFT JOIN
        pg_stat_user_indexes d
        ON c.TABLE_NAME = d.relname
where
    a.table_name in ( select TABLE_NAME frominformation_schema.tables where table_schema = 'public' and table_type= 'BASETABLE' and is_insertable_into = 'YES')
order by
    a.TABLE_NAME,a.COLUMN_NAME

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章