用SQL语言查找表和视图的字段的注释信息

本文提供了一条SQL语句,用于在MSSQLServer2000中查询数据库的所有用户表及视图的系统ID、名称、注释信息等详细字段属性。

在MS SQL Server 2000中查找一个数据库中的所有用户表和用户视图的系统ID、名称和其注释信息的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'),0as 小数位数,
    (
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
<think>嗯,用户想了解MySQLOracle如何根据表名称或字段注释查找表名。我需要先回忆这两个数据库的系统表结构。 对于MySQL,我记得信息模式(INFORMATION_SCHEMA)里有COLUMNS表,里面存储了字段注释。所以,如果要根据字段注释找表,应该查询COLUMNS表,用COLUMN_COMMENT字段过滤。而根据表名的话,可能用TABLES表的TABLE_NAME字段。不过用户可能需要的是模糊查询,所以得用LIKE操作符。 然后是Oracle,Oracle的数据字典视图比较复杂。字段注释应该在ALL_COL_COMMENTS,表注释在ALL_TAB_COMMENTS。所以根据字段注释查询时,需要连接ALL_TAB_COLUMNSALL_COL_COMMENTS,或者直接查ALL_COL_COMMENTS的COMMENTS字段。表名的话,查ALL_TABLES中的TABLE_NAME,或者结合注释的话用ALL_TAB_COMMENTS。 需要注意权限问题,比如ALL_开头的视图只能看到用户有权限访问的对象,如果需要包括所有,可能需要用DBA_视图,但需要更高权限。另外,用户可能需要模糊查询的例子,所以示例中应该包含%符号,比如LIKE '%关键字%'。 可能用户实际应用场景是在数据库维护或逆向工程时,根据注释快速定位表结构。要确保给出的SQL示例正确,并且解释清楚每个部分的作用,避免用户执行时报错。还要提醒注释是否填写,因为如果注释为空,查询可能不会有结果。最后,检查语法是否正确,比如Oracle的字符串连接符||的使用,以及别名是否正确。</think>以下是MySQLOracle根据表名称或字段注释查找表名的SQL写法: --- ### 一、MySQL实现方式 #### 1. 根据**字段注释**查找表名 ```sql SELECT TABLE_SCHEMA AS '数据库名', TABLE_NAME AS '表名', COLUMN_NAME AS '字段名', COLUMN_COMMENT AS '字段注释' FROM INFORMATION_SCHEMA.COLUMNS WHERE COLUMN_COMMENT LIKE '%关键词%'; ``` #### 2. 根据**表名**查找表 ```sql SELECT TABLE_SCHEMA AS '数据库名', TABLE_NAME AS '表名', TABLE_COMMENT AS '表注释' FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME LIKE '%关键词%'; ``` --- ### 二、Oracle实现方式 #### 1. 根据**字段注释**查找表名 ```sql SELECT OWNER AS "所属用户", TABLE_NAME AS "表名", COLUMN_NAME AS "字段名", COMMENTS AS "字段注释" FROM ALL_COL_COMMENTS WHERE COMMENTS LIKE '%关键词%'; ``` #### 2. 根据**表名或表注释**查找表 ```sql SELECT OWNER AS "所属用户", TABLE_NAME AS "表名", COMMENTS AS "表注释" FROM ALL_TAB_COMMENTS WHERE TABLE_NAME LIKE '%关键词%' OR COMMENTS LIKE '%关键词%'; ``` --- ### 三、关键说明 1. **模糊查询**:`LIKE '%关键词%'`中的`%`为通配符,表示任意字符 2. **权限差异**: - `ALL_`开头的视图:显示当前用户有权限访问的对象 - `DBA_`开头的视图:需要DBA权限(显示所有对象) - `USER_`开头的视图:仅显示当前用户拥有的对象 3. **注释为空的情况**:如果字段/表未设置注释,则不会出现在查询结果中 --- ### 四、扩展用法示例 #### 同时查询表名字段注释(Oracle) ```sql SELECT a.TABLE_NAME AS "表名", a.COLUMN_NAME AS "字段名", b.COMMENTS AS "字段注释" FROM ALL_TAB_COLUMNS a LEFT JOIN ALL_COL_COMMENTS b ON a.OWNER = b.OWNER AND a.TABLE_NAME = b.TABLE_NAME AND a.COLUMN_NAME = b.COLUMN_NAME WHERE b.COMMENTS LIKE '%订单%'; ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值