sqlserver讀取數據庫表結構

在使用sql server進行表管理時,可以通過sql語句來獲取 表相關的結構

主要用到的是

sys.sysobjects 數據庫對象表。包括 表名對象 、表的約束等,都存在這張表上

sys.syscolumns 數據庫所有物理表的列 存儲所有表的列

sys.syscomments 默認值信息表 主要存儲了表的列的默認值

sys.extended_properties 擴展屬性 列的相關擴展屬性,像 列字段的說明等

select 
    TB.[Name] As TableID, TC.[name] As FieldName, TC.[colorder] As ColID, 
    (Case When TK.TABLE_NAME Is not Null Then 'Y' Else 'N' End) As PrimaryKey, 
   (Case When TK.TABLE_NAME Is not Null Then (Case When COLUMNPROPERTY( TC.id,TC.name,'IsIdentity')=1 Then 'Identity' Else 'customer' END) Else '' End) As PrimaryKeyType, 
    (Case TC.xtype When 231 Then 'nvarchar' When 61 Then 'datetime' When 175 Then 'char' When 56 Then 'int' When 99 Then 'ntext' when 108 Then 'numeric'when 34 Then 'image' Else null End) As FieldDbType, 
    (Case When TC.xtype = 231 Then TC.[length]/2 Else 1 End) As Length, 
    (Case TC.[isnullable] When 0 Then 'N' Else 'Y' End) As Nullable, 
    SUBSTRING(TM.text,4 , len(TM.text)-5) As DefaultValue,
     TE.value AS Remarks
from sys.sysobjects TB  --ob 所以取B 表示對象  
    left join sys.syscolumns TC on TB.id = TC.id --Column 列 就取 TC替代
    left join INFORMATION_SCHEMA.KEY_COLUMN_USAGE TK on TB.[name]= TK.TABLE_NAME and TK.COLUMN_NAME = TC.[name]
    left join sys.syscomments TM on TC.cdefault=TM.id 
    left join sys.extended_properties TE on  TC.id=TE.major_id and TC.colid=TE.minor_id     
where TB.[Name] = '表名'
order by  
      TC.id,TC.colorder

想要更改表結構信息的 可以參照 這篇文章 數據庫 SQL Server 修改 表結構 腳本 sql語句

附:

網上扒來的 包含是否爲索引 的 sql查詢

SELECT  
        a.colorder as colOrder, 
        d.name as tableName,
        a.name as FieldName, 
        convert(int,case when COLUMNPROPERTY( a.id,a.name,'IsIdentity')=1 then 1 else 0 end) as isIndex, 
        convert(int,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 1 else 0 end) as isPk, 
        b.name as sqlTypeName, 
        a.length as 'length', 
        convert(int,COLUMNPROPERTY(a.id,a.name,'PRECISION')) as 'size', 
        convert(int,isnull(COLUMNPROPERTY(a.id,a.name,'Scale'),0)) as 'scale', 
        convert(int,case when a.isnullable=1 then 1 else 0 end) as 'Nullable', 
        convert(varchar(100), isnull(e.text,'')) as defaultVal, 
        convert(varchar(255), isnull(g.[value],'')) as remarks 
 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='表名'
order by  
        a.id,a.colorder

 

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