读取SQLServer 数据表结构

本文提供了一种SQL查询优化的方法,通过特定的查询语句获取数据库表结构详情,包括字段名称、类型、长度等,并标记了主键、聚类索引及自增长字段等关键属性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

刚好需要这个过程, 在网上找了几个, 感觉都差一些, 其SQL都特别长. 而且我特别需要用到聚类索引, 自己写了个, 这是程序开发使用到的版本.

select o.name tablename, c.name fieldname, t.name fieldtype, columnproperty(c.id,c.name,'PRECISION') fieldlen, c.Scale,c.length,
  c.colid fieldorder, c.isnullable, 
  
case when c.colid in(select ik.colid
    
from sysindexes i, Sysindexkeys ik, sysobjects oo
    
where i.id=ik.id and i.indid=ik.indid
      
and i.name=oo.name and oo.xtype='PK' --主键
      and o.id=i.id 
  ) 
then 1 else 0 end isPrimaryKey,
  
case when c.colid in(select ik.colid
    
from sysindexes i, Sysindexkeys ik
    
where i.id=ik.id and i.indid=ik.indid
      
and o.id=i.id and i.indid=1 --聚类索引
  ) then 1 else 0 end isClusterKey,
  
columnproperty( c.id, c.name,'IsIdentity') IsIdentity,
  
isnull(m.text,'') defaultvalue
from sysobjects o, syscolumns c, systypes t, syscomments m
where o.xtype='U'
  
and o.id=c.id 
  
and c.xtype=t.xtype
  
and c.cdefault*=m.id
order by o.name, c.colid

程序使用到的版本是否用0/1表示, 如果用在文档整理, 难看得要命, 优化了个文档版本的,在查询分析器找出来还是蛮好看的.

select case when c.colid=1 then o.name else '' end 表名, 
  c.colid 顺序, 
  c.name 字段名, 
  t.name 字段类型, 
  
columnproperty(c.id,c.name,'PRECISION') 字段长度, 
  
isnull(c.Scale,'') 小数位,
  c.length 占用字节,
  
case when c.isnullable=1 then '' else '' end 可为空, 
  
case when c.colid in(select ik.colid
    
from sysindexes i, Sysindexkeys ik, sysobjects oo
    
where i.id=ik.id and i.indid=ik.indid
      
and i.name=oo.name and oo.xtype='PK' --主键
      and o.id=i.id 
  ) 
then '' else '' end 主键,
  
case when c.colid in(select ik.colid
    
from sysindexes i, Sysindexkeys ik
    
where i.id=ik.id and i.indid=ik.indid
      
and o.id=i.id and i.indid=1 --聚类索引
  ) then '' else '' end 聚类索引,
  
case when columnproperty( c.id, c.name,'IsIdentity')=1 then '' else '' end 自增长,
  
isnull(m.text,'') 默认值
from sysobjects o, syscolumns c, systypes t, syscomments m
where o.xtype='U'
  
and o.id=c.id 
  
and c.xtype=t.xtype
  
and c.cdefault*=m.id
order by o.name, c.colid
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值