SQL语句如下:
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 sys.extended_properties g
on a.id=g.major_id AND a.colid = g.Minor_id
order by d.name,a.id,a.colorder
现在网上大部分资料都跟这个类似,在这里对用到的几个系统表做一下说明:
syscolumns:用来记录描述数据库的字段信息的,id是table表的编号;colid是表中字段编号;xtype是表的物理存储类型;cdefault是该列的默认值的id(不是默认值);colorder微软未给出明确说明,不过从字面意思判断应该是对表中字段的一个排序(表设计界面从上到下的一个排序,一般情况下跟colid相同)。
systypes:存储了数据库中所有的数据类型和这些类型的长度。
sysobjects:存储的是数据库中所有的约束、视图、表、存储过程、触发器等等,包括这些东西的创建时间,同时这是一张自关联表。
syscomments:存储的是所有视图、规则、默认值、触发器、CHECK 约束、DEFAULT 约束和存储过程的详细内容(包括详细内容的16进制),在这里用来查询字段的默认值。
extended_properties:存储的是表中每个字段的说明,说明字段的用途,在SQlserver早些的版本中是没有这个表的,以前的表名称是sysproperties(这个名字改的让很多人蛋疼。。。)
sysindexes、sysindexkeys:这两个表存储的是跟表索引相关的内容