CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  MS-SQL Server >  基础类

怎么将SQL Server中所有表和列信息显示出来

楼主nhr(无名氏)2006-03-01 11:52:08 在 MS-SQL Server / 基础类 提问

谁可以帮我写个SQL执行后返回的列分别是:表名、列名、列类型、列长度、列描述、是否主键  
  写完整来。就是我一拿过来就可以运行的那种!~!~谢谢哦。 问题点数:50、回复次数:10Top

1 楼lsqkeke(可可)回复于 2006-03-01 11:56:23 得分 20

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

2 楼lsqkeke(可可)回复于 2006-03-01 11:57:19 得分 0

这是SQL   版主写的Top

3 楼nhr(无名氏)回复于 2006-03-01 12:03:00 得分 0

谢谢楼上的,不过怎么我运行起来有问题啊?Top

4 楼zlp321002(Life Is Good,Let's Shine)回复于 2006-03-01 12:24:59 得分 10

--你的是什么数据库??2005?Top

5 楼shareinfo(长江之怀)回复于 2006-03-01 12:37:14 得分 10

第一步创建一个视图  
  create   view   v_all_table   as   SELECT   o.name   t_name,   l.name   t_columns,   t   .name   t_type,   l.length,   l.isnullable,   c.text,   l.colorder  
  FROM   sysobjects   o,   syscolumns   l,   systypes   t,   syscomments   c  
  WHERE   o.xtype   =   'u'   AND   o.id   =   l.id   AND   l.xtype   =   t   .xtype   AND   l.cdefault   =   c.id   AND   l.cdefault   <>   0  
  UNION   SELECT   o.name   t_name,   l.name   t_columns,   t   .name   t_type,   l.length,   l.isnullable,   ''   AS   text,   l.colorder  
  FROM   sysobjects   o,   syscolumns   l,   systypes   t  
  WHERE   o.xtype   =   'u'   AND   o.id   =   l.id   AND   l.xtype   =   t   .xtype   AND   l.cdefault   =   0  
  第二步查询  
   
  SELECT    
   
                (case   when   a.colorder=1   then   d.name   else   ''   end)表名,  
   
                a.colorder   字段序号,  
   
                a.name   字段名,  
   
                (case   when   COLUMNPROPERTY(   a.id,a.name,'IsIdentity')=1   then   '√'else   ''   end)   标识,  
   
                (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)   主键,  
   
                b.name   类型,  
   
                a.length   占用字节数,  
   
                COLUMNPROPERTY(a.id,a.name,'PRECISION')   as   长度,  
   
                isnull(COLUMNPROPERTY(a.id,a.name,'Scale'),0)   as   小数位数,  
   
                (case   when   a.isnullable=1   then   '√'else   ''   end)   允许空,  
   
                isnull(e.text,'')   默认值,  
   
                isnull(g.[value],'')   AS   字段说明          
   
   
     
   
   
  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      
   
  order   by   a.id,a.colorder  
   
   
  不是我写的,是引用别人的Top

6 楼Teng_s2000(分涨的太慢,升星难啊!!)回复于 2006-03-01 12:48:12 得分 10

 
  SET   ANSI_NULLS   OFF    
   
  GO  
   
  SET   NOCOUNT   ON  
   
  GO  
   
  SET   LANGUAGE   'Simplified   Chinese'  
   
  go  
   
  DECLARE   @tbl   nvarchar(200),@fld   nvarchar(200),@sql   nvarchar(4000),@maxlen   int,@sample   nvarchar(40)  
   
   
  SELECT   d.name   TableName,a.name   FieldName,b.name   TypeName,a.length   Length,a.isnullable   IS_NULL   INTO   #t  
   
  FROM     syscolumns     a,     systypes   b,sysobjects   d      
   
  WHERE     a.xtype=b.xusertype     and     a.id=d.id     and     d.xtype='U'    
   
  DECLARE   read_cursor   CURSOR  
   
  FOR   SELECT   TableName,FieldName   FROM   #t  
   
   
  SELECT   TOP   1   '_TableName                                           '   TableName,  
   
                          'FieldName                                             '   FieldName,'TypeName                           '   TypeName,  
   
                          'Length'   Length,'IS_NULL'   IS_NULL,    
   
                          'MaxLenUsed'   AS   MaxLenUsed,'Sample   Value                     '   Sample,  
   
                            'Comment       '   Comment   INTO   #tc   FROM   #t  
   
  OPEN   read_cursor  
   
  FETCH   NEXT   FROM   read_cursor   INTO   @tbl,@fld  
   
  WHILE   (@@fetch_status   <>   -1)     ---   failes  
   
  BEGIN  
   
                IF   (@@fetch_status   <>   -2)   --   Missing  
   
                BEGIN  
   
                              SET   @sql=N'SET   @maxlen=(SELECT   max(len(cast('+@fld+'   as   nvarchar)))   FROM   '+@tbl+')'  
   
                              --PRINT   @sql  
   
                              EXEC   SP_EXECUTESQL   @sql,N'@maxlen   int   OUTPUT',@maxlen   OUTPUT  
   
                              --print   @maxlen  
   
                              SET   @sql=N'SET   @sample=(SELECT   TOP   1   cast('+@fld+'   as   nvarchar)   FROM   '+@tbl+'   WHERE   len(cast('+@fld+'   as   nvarchar))='+convert(nvarchar(5),@maxlen)+')'  
   
                              EXEC   SP_EXECUTESQL   @sql,N'@sample   varchar(30)   OUTPUT',@sample   OUTPUT  
   
                              --for   quickly        
   
                              --SET   @sql=N'SET   @sample=convert(varchar(20),(SELECT   TOP   1   '+@fld+'   FROM   '+  
   
                                            --@tbl+'   order   by   1   desc   ))'      
   
                              PRINT   @sql  
   
                              print   @sample  
   
                              print   @tbl  
   
                              EXEC   SP_EXECUTESQL   @sql,N'@sample   nvarchar(30)   OUTPUT',@sample   OUTPUT  
   
                              INSERT   INTO   #tc   SELECT   *,ltrim(ISNULL(@maxlen,0))   as   MaxLenUsed,  
   
                                            convert(nchar(20),ltrim(ISNULL(@sample,'   ')))   as   Sample,'   '   Comment   FROM   #t   where   TableName=@tbl   and   FieldName=@fld  
   
                END  
   
                FETCH   NEXT   FROM   read_cursor   INTO   @tbl,@fld  
   
  END  
   
  CLOSE   read_cursor  
   
  DEALLOCATE   read_cursor  
   
  GO  
   
  SET   ANSI_NULLS   ON  
   
  GO  
   
  SET   NOCOUNT   OFF  
   
  GO  
   
  select   count(*)     from   #t  
   
  DROP   TABLE   #t  
   
  GO  
   
  select   count(*)-1     from     #tc  
  select   *   into   ##tx   from   #tc   order   by   tablename  
  select   *   from     ##tx  
   
  这个代码好像是邹老大写的。  
  在2000,2005   上都可以Top

7 楼nhr(无名氏)回复于 2006-03-01 13:40:07 得分 0

我用的是SQL2000!~谢谢楼上各位大大。我现在每个试下:)Top

8 楼nhr(无名氏)回复于 2006-03-01 13:45:56 得分 0

哦。是这样的。数据库不是在我机器上。我是远程调用啊。因为原来的服务器进不去了。所以我想在本机通过程序来把数据库的结构读出来。然后再重新做一个库!~~Top

9 楼lsqkeke(可可)回复于 2006-03-01 14:39:29 得分 0

我提供的那个是在SQL2000下运行的,显示出本机数据库中所有的表中字段的信息Top

10 楼nhr(无名氏)回复于 2006-03-01 15:21:49 得分 0

哎。。我用新建SQL注册就提示超时~~好郁闷啊Top

相关问题

  • SQL Server 表默认不显示 Foreign Key , 怎么让他们显示出来
  • 在sql server 2000中如何让Enterprice Manage 中不显示系统表,只显示用户表?
  • 为什么我的sql server服务管理器 里面不显示列表?
  • 如何在SQL SERVER里实时地显示SYBASE数据库的表记录
  • 如何使excel表读取显示数据库中(sql server)指定的数据
  • 想显示一个数据库里所有的表名称该用什么Sql 语句(ms sql server)
  • 如何把几个表合成一个大表然后显示出来?类似Sql Server 2000的视图!
  • 请问在Access中,哪个系统表可以显示 象Sql server 2000 中的系统表syscolumns 中的信息?
  • 怎样让SQL只显示用户表?
  • 求显示表结构SQL命令

关键词

  • sql2000
  • 字段
  • 数据库
  • xtype
  • columnproperty
  • maxlen
  • isnull
  • colorder
  • cdefault
  • tbl

得分解答快速导航

  • 帖主:nhr
  • lsqkeke
  • zlp321002
  • shareinfo
  • Teng_s2000

相关链接

  • SQL Server类图书

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo