SQLServer表数据字典/表描述动态查询_改进
2011-05-31 16:06
337 查看
网上流传的查询sqlserver表描述的方法,发现有些地方不准确,比如是否主键的处理。
改进了一下,对于sql2000和 2005/2008的区别,去掉/添加join部分的注释即可。
改进了一下,对于sql2000和 2005/2008的区别,去掉/添加join部分的注释即可。
-- ============================================= -- Author: <E.R> -- Create date: <5/31/2011> -- Description: <Get the description of a table> -- ============================================= CREATE PROCEDURE [dbo].[proc_QueryDD] @tableName varchar(50) AS BEGIN SELECT [Owner] = h.name ,[Table Name] = d.name ,[Table Description] = ISNULL(f.value, '') ,[Field Index] = a.colorder ,[Field Name] = a.name ,[Field Description] = ISNULL(g.[value], '') ,[Is Identity] = CASE WHEN COLUMNPROPERTY(a.id, a.name, 'IsIdentity') = 1 THEN 'Y' ELSE '' END ,[Primary Key] = CASE WHEN EXISTS ( SELECT 1 FROM sysindexes id, syscolumns cl, sysobjects ob WHERE ob.id = a.id AND ob.id = cl.id AND ob.id = id.id AND ( id.status & 0x800 ) = 0x800 AND ( cl.name = INDEX_COL(@tableName, id.indid, 1) OR cl.name = INDEX_COL(@tableName, id.indid, 2) OR cl.name = INDEX_COL(@tableName, id.indid, 3) OR cl.name = INDEX_COL(@tableName, id.indid, 4) OR cl.name = INDEX_COL(@tableName, id.indid, 5) OR cl.name = INDEX_COL(@tableName, id.indid, 6) OR cl.name = INDEX_COL(@tableName, id.indid, 7) OR cl.name = INDEX_COL(@tableName, id.indid, 8) OR cl.name = INDEX_COL(@tableName, id.indid, 9) OR cl.name = INDEX_COL(@tableName, id.indid, 10) OR cl.name = INDEX_COL(@tableName, id.indid, 11) OR cl.name = INDEX_COL(@tableName, id.indid, 12) OR cl.name = INDEX_COL(@tableName, id.indid, 13) OR cl.name = INDEX_COL(@tableName, id.indid, 14) OR cl.name = INDEX_COL(@tableName, id.indid, 15) OR cl.name = INDEX_COL(@tableName, id.indid, 16) ) AND cl.name = a.name ) THEN 'Y' ELSE '' END ,[DB Type] = b.name ,[Bytes in store] = a.length ,[Length] = COLUMNPROPERTY(a.id, a.name, 'PRECISION') ,[Numeric] = ISNULL(COLUMNPROPERTY(a.id, a.name, 'Scale'), 0) ,[Is Nullable] = CASE WHEN a.isnullable = 1 THEN 'Y' ELSE '' END ,[Default Value] = ISNULL(e.text, '') FROM syscolumns a LEFT OUTER 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 OUTER JOIN sysusers h ON h.uid = d.uid LEFT OUTER JOIN syscomments e ON a.cdefault = e.id --X:for sql 2005/2008 LEFT OUTER JOIN sys.extended_properties g ON a.id = g.major_id AND a.colid = g.minor_id AND g.name = 'MS_Description' LEFT OUTER JOIN sys.extended_properties f ON d.id = f.major_id AND f.minor_id = 0 AND f.name = 'MS_Description' --X:end /* --Y:for sql 2000 left outer join sysproperties g on a.id=g.id and a.colid=g.smallid and g.name='MS_Description' left outer join sysproperties f on d.id=f.id and f.smallid=0 and f.name='MS_Description' --Y:end */ WHERE d.name = @tableName ORDER BY a.id, a.colorder END GO
相关文章推荐
- Ext.grid.EditorGridPanel单元格内套用下拉列表,且列表数据为动态加载,支持模糊查询,有描述信息
- sqlserver 数据字典查询
- 一个单词单词字母交换,可得另一个单词,如army->mary,成为兄弟单词。提供一个单词,在字典中找到它的兄弟。描述数据结构和查询过程
- oracle 数据字典和动态性能视图数据 与用户权限角色查询
- SQL Server 查询数据库的表结构以及描述来生成数据字典
- 甩掉数据字典,让Sql Server数据库也来一个自描述
- SQL存储过程动态查询数据区间
- 基于Spring Boot,使用JPA动态调用Sql查询数据
- SqlServer 基础知识-数据检索、查询排序
- 基于数据字典的通用查询系统(一)SQL语句的构成分析
- SQLserver查询数据类型为ntext是空或NULL值的方法
- 数据字典和动态性能视图
- 基于数据字典的通用查询系统(三)数据库的设计
- SQLSERVER 多表查询使用/显示多列数据
- DB2存储过程实现查询表数据,生成动态SQL,并执行
- MySQL、Oracle、SQLServer 数据分页查询语句
- ORACLE用户常用数据字典查询
- Oracle的基本操作-数据字典和动态性能视图的介绍
- Oracle、MySql、SQLServer 数据分页查询
- 分享一个自己开发的数据字典与动态代码生成工具