SQL提取数据库表名、字段名等信息

系统 1541 0

-------在SQLserver 2000中测试

-- 查询所有用户表所有字段的特征
SELECT  D.Name  as  TableName, A.colorder  AS  ColOrder, A.name  AS  Name,  
   COLUMNPROPERTY (A.ID,A.Name,  ' IsIdentity ' AS  IsIdentity,  
   CASE   WHEN   EXISTS
  ( SELECT   1
   FROM  dbo.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   1   ELSE   0   END   AS  主键,  
  B.name  AS  类型,
  A.length  AS   [ 长度 ] ,
  A.xprec  AS   [ 精度 ] ,
  A.xscale  AS   [ 小数 ] ,
   CASE   WHEN  A.isnullable  =   1   THEN   1   ELSE   0   END   AS   [ 可为空 ] ,  
ISNULL (E. text '   ' AS   [ 默认值 ] ,  
   ISNULL (G. [ value ] '   ' AS   [ 说明 ]
FROM  dbo.syscolumns A  LEFT   OUTER   JOIN
  dbo.systypes B  ON  A.xtype  =  B.xusertype  INNER   JOIN
  dbo.sysobjects D  ON  A.id  =  D.id  AND  D.xtype  =   ' U '   AND   
  D.name  <>   ' dtproperties '   LEFT   OUTER   JOIN
  dbo.syscomments E  ON  A.cdefault  =  E.id 
   LEFT   OUTER   JOIN  dbo.sysproperties G  ON  A.id  =  G.id  AND  A.colid  =  G.smallid
-- WHERE D.Name='tablename' --如果找指定表,把注释去掉
ORDER   BY   1 2

 

------在SQLserver 2005中测试

-- 查询所有用户表所有字段的特征
SELECT     
( case   when  a.colorder = 1   then  d.name  else   ''   end as  表名, -- 如果表名相同就返回空   
     a.colorder  as  字段序号,   
     a.name  as  字段名,   
     ( case   when   COLUMNPROPERTY ( a.id,a.name,  ' IsIdentity '  ) = 1   then   ' '   else   ''   end as  标识,   
     ( 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 as  主键, -- 查询主键END   
b.name  as  类型,   
a.length  as  占用字节数,   
COLUMNPROPERTY (a.id,a.name, ' PRECISION '  )  as     长度,   
isnull ( COLUMNPROPERTY (a.id,a.name, ' Scale '  ), 0 as  小数位数,   
( case   when  a.isnullable = 1   then   ' '   else   ''   end as  允许空,   
isnull (e. text , ''  )  as  默认值,   
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  sys.extended_properties g   
on  a.id = g.major_id  AND  a.colid  =  g.minor_id    
      -- where d.name='PE_U_ValliMessage' --所要查询的表   
order   by  a.id,a.colorder  

 

 

SQL提取数据库表名、字段名等信息


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论