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
从这个 sql 语句我学到的东西:
1、case when ... then ... else ... end :选择语句用在 select 语句中,可以将原来用0,1这样的描述信息,转换为实际的含义,而不要在程序中根据查询出来的结果再进行判断。这个可以理解为简单的数据格式化吧。如这条sql 语句中出现的 case when a.isnullable = 1 then '√' else '' end 将数据库从存储的 0,1 转换为了 '√' 和'';
2、left join :使用这种连接方式可以使查询结果描述出一种包含关系。
3、isnull 函数:ISNULL ( check_expression , replacement_value ) ,作用是使用指定的替换值替换 NULL,例如下面的 SQL 语句中如果一本书的名称为 null ,则将价格设置为 0.00。
SELECT SUBSTRING(title, 1, 15) AS Title, type AS Type,
ISNULL(price, 0.00) AS Price
FROM titles
4、当然,最重要的是学到这个列出数据库表信息(包括表名、字段名、是否标识、是否主键、字段类型、字节数、长度、小数位数、允许空、默认值、字段说明)的 SQL 语句。