获取SQL SERVER 2000/2005数据库字段属性(转)

--SQL SERVER 2000 和 2005结构是不一样的,所以在获取SQL SERVER 2000/2005字段属性时需要分别来获取。

--1。SQL SERVER 2000

SELECT
     字段名     = a.name,
     主键       = 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 '1' else '0' end,
     标识       = CASE WHEN COLUMNPROPERTY(a.id, a.name,
                       'IsIdentity') = 1 THEN '1' ELSE '0' END,
     类型       = b.name,
    占用字节数 = a.length,
    长度       = COLUMNPROPERTY(a.id,a.name,'PRECISION'),
    小数       =  a.xscale,
    可空       = a.isnullable,
    默认值     = 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='UserAccount'

--d.name = 'UserAccount',UserAccount为你需要查找的数据表。


--2。SQL SERVER 2005


SELECT     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 '1' ELSE '0' END AS 'key', CASE WHEN COLUMNPROPERTY(a.id, a.name,
                      'IsIdentity') = 1 THEN '1' ELSE '0' END AS 'identity', a.name AS ColName, c.name AS TypeName, a.length AS 'byte', COLUMNPROPERTY(a.id, a.name,
                      'PRECISION') AS 'length', a.xscale, a.isnullable, ISNULL(e.text, '') AS 'default', ISNULL(p.value, '') AS 'comment'
FROM         sys.syscolumns AS a INNER JOIN
                      sys.sysobjects AS b ON a.id = b.id INNER JOIN
                      sys.systypes AS c ON a.xtype = c.xtype LEFT OUTER JOIN
                      sys.syscomments AS e ON a.cdefault = e.id LEFT OUTER JOIN
                      sys.extended_properties AS p ON a.id = p.major_id AND a.colid = p.minor_id
WHERE     (b.name = 'keyfactory') AND (c.status <> '1')
--b.name = 'Keyfactory','Keyfactory'为你想要查找的数据表。

posted @ 2009-03-25 13:42  自由精灵  阅读(1358)  评论(0编辑  收藏  举报