今天突然遇到有人要数据库表及表字段说明,数据库表太多又不能一个个表去找,就想想SQL是否能直接查询出来。
经过查询资料,加上一些自己的一些调整写了一个sql语句,在此记录一下,以方便日后查找使用。
SELECT ( CASE WHEN a.colorder = 1 THEN d.name ELSE ‘‘ END ) N‘表名‘ , ( CASE WHEN a.colorder = 1 THEN ISNULL(( SELECT TOP 1 value FROM sys.extended_properties WHERE major_id = OBJECT_ID(d.name) ), ‘‘) ELSE ‘‘ END ) N‘表说明‘ , a.colorder N‘字段序号‘ , a.name N‘字段名‘ , ( CASE WHEN COLUMNPROPERTY(a.id, a.name, ‘IsIdentity‘) = 1 THEN ‘√‘ ELSE ‘‘ END ) N‘标识‘ , ( 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 ) N‘主键‘ , b.name N‘类型‘ , a.length N‘占用字节数‘ , COLUMNPROPERTY(a.id, a.name, ‘PRECISION‘) AS N‘长度‘ , ISNULL(COLUMNPROPERTY(a.id, a.name, ‘Scale‘), 0) AS N‘小数位数‘ , ( CASE WHEN a.isnullable = 1 THEN ‘√‘ ELSE ‘‘ END ) N‘允许空‘ , ISNULL(e.text, ‘‘) N‘默认值‘ , ISNULL(g.[value], ‘‘) AS N‘字段说明‘ FROM sys.syscolumns a LEFT JOIN sys.systypes b ON a.xtype = b.xusertype INNER JOIN sys.sysobjects d ON a.id = d.id AND d.xtype = ‘U‘ AND d.name <> ‘dtproperties‘ LEFT JOIN sys.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 OBJECT_NAME(a.id) , a.colorder;
原文地址:https://www.cnblogs.com/wsk198726/p/10730361.html
时间: 2024-10-12 21:39:45