今天整理资料时看到有这样一个查询数据库中的表和字段信息的语句,很强! 就是忘了当初谁写的了,印像中该是邹建所创。也贴出来以后备用吧。
1
SELECT
2
表名;;;=CASEa.colorder;WHEN1THENc.name;ELSE''END,
3
序;;;;;=a.colorder,
4
字段名;=a.name,
5
标识;;;=CASECOLUMNPROPERTY(a.id,a.name,'IsIdentity');WHEN1THEN'√'ELSE''END,
6
主键;;;=CASE
7
WHENEXISTS(
8
SELECT*
9
FROMsysobjects
10
WHERExtype='PK'ANDname;IN(
11
SELECTname
12
FROMsysindexes
13
WHEREid=a.id;ANDindid;IN(
14
SELECTindid
15
FROMsysindexkeys
16
WHEREid=a.id;ANDcolid;IN(
17
SELECTcolid
18
FROMsyscolumns
19
WHEREid=a.id;ANDname=a.name
20
)
21
)
22
)
23
)
24
THEN'√'
25
ELSE''
26
END,
27
类型;;;=b.name,
28
字节数;=a.length,
29
长度;;;=COLUMNPROPERTY(a.id,a.name,'Precision'),
30
小数;;;=CASEISNULL(COLUMNPROPERTY(a.id,a.name,'Scale'),0)
31
WHEN0THEN''
32
ELSECAST(COLUMNPROPERTY(a.id,a.name,'Scale');ASVARCHAR)
33
END,
34
允许空;=CASEa.isnullable;WHEN1THEN'√'ELSE''END,
35
默认值;=ISNULL(d.[text],''),
36
说明;;;=ISNULL(e.[value],'')
37
FROMsyscolumns;a
38
LEFTJOINsystypes;;;;;;b;ONa.xtype=b.xusertype
39
INNERJOINsysobjects;;;;c;ONa.id=c.id;ANDc.xtype='U'ANDc.name<>'dtproperties'
40
LEFTJOINsyscomments;;;d;ONa.cdefault=d.id
41
LEFTJOINsysproperties;e;ONa.id=e.id;ANDa.colid=e.smallid
42
ORDERBYc.name,;a.colorder
我修改一下,变个精简版本的:
1
2select a.name, b.xtype,b.name
3from syscolumns a
4inner; JOIN systypes; b
5ON a.xtype=b.xusertype
6inner join sysobjects c ON
7a.id=c.id AND c.xtype='U' AND c.name<>'dtproperties' where c.name = 表名


