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 ##txFROM  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  
order by object_name(a.id),a.colorder

解决方案 »

  1.   

    妙哉,liuxiang_csdn(刘翔)的这句SQL写的好,收了!学习!
      

  2.   

    liuxiang_csdn(刘翔)也是借用别人写的,大部分人都知道,楼上自己搜索一下就知道了。
      

  3.   

    楼上的楼上以前只是见过一个列出一张表结构的存储过程,现在楼上的给扩展到整个数据库,还只用一条SQL实现,佩服!真是一恍惚间,变化万千;三秒钟不问世事,便是一番新天地了。
      

  4.   

    请问这局话的用在哪里呀,而且怎么才能将生成表存起来等着打印呢,能不能把他先保存到excel里去呀,怎么作呀
      

  5.   

    楼主说的打印问题谁解释一下,sql server支持直接打印吗?
      

  6.   

    把记录集粘到excel 中,打印就可以灵活自如地控制了。
      

  7.   

    查询结果可导出为csv文件用excel处理.
      

  8.   

    从皱老大那儿批发来的。
    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 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 sysproperties g on a.id=g.id and a.colid=g.smallid  
     left join sysproperties f on d.id=f.id and f.smallid=0
    --where d.name='要查询的表'    --如果只查询指定表,加上此条件
    order by a.id,a.colorder