Wilson

SQL Server 读取数据库字段属性

SQL 2005 下读取数据库字段属性


SELECT     
          表名               
=   case   when   a.colorder=1   then   d.name   else   ''   end,   
          表说明           
=   case   when   a.colorder=1   then   isnull(f.value,'')   else   ''   end,   
          字段序号       
=   a.colorder,   
          字段名           
=   a.name,   
          标识               
=   case   when   COLUMNPROPERTY(   a.id,a.name,'IsIdentity')=1   then   ''else   ''   end,   
          主键               
=   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   ''   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     
  
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='DeptInfo'         --如果只查询指定表,加上此条件   
  order   by     
          a.id,a.colorder   






 SQL 2000 下读取数据库字段属性



SELECT
(
case   when   a.colorder=1   then   d.name   else   ''   end)   N'表名',   
  a.colorder   N
'字段序号',   
  a.name   N
'字段名',   
  (
case   when   COLUMNPROPERTY(   a.id,a.name,'IsIdentity')=1   then   ''else   ''   end)   N'标识',   
  (
case   when   (SELECT   count(*)   
  
FROM   sysobjects   
  
WHERE   (name   in   
                      (
SELECT   name   
                    
FROM   sysindexes   
                    
WHERE   (id   =   a.id)   AND   (indid   in   
                                        (
SELECT   indid   
                                      
FROM   sysindexkeys   
                                      
WHERE   (id   =   a.id)   AND   (colid   in   
                                                          (
SELECT   colid   
                                                        
FROM   syscolumns   
                                                        
WHERE   (id   =   a.id)   AND   (name   =   a.name)))))))   AND   
                (xtype   
=   'PK'))>0   then   ''   else   ''   end)   N'主键',   
  b.name   N
'类型',   
  a.length   N
'占用字节数',   
  
COLUMNPROPERTY(a.id,a.name,'PRECISION')   as   N'长度',   
  
isnull(COLUMNPROPERTY(a.id,a.name,'Scale'),0)   as   N'小数位数',   
  (
case   when   a.isnullable=1   then   ''else   ''   end)   N'允许空',   
  
isnull(e.text,'')   N'默认值',   
  
isnull(g.[value],'')   AS   N'字段说明'   
  
--into   ##tx   
    
  
FROM     syscolumns     a   left   join   systypes   b     
  
on     a.xtype=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   sysproperties   g   
  
on   a.id=g.id   AND   a.colid   =   g.smallid   
-- Where d.name= 'DeptInfo'
  order   by   object_name(a.id),a.colorder

 

GO 

posted on 2008-05-10 09:31  魏文元  阅读(654)  评论(1)    收藏  举报

导航