如何从数据库查询各表中所有存在默认值的字段

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何从数据库查询各表中所有存在默认值的字段相关的知识,希望对你有一定的参考价值。

如题,执行添加字段注释的时候不小心忽略了默认值约束,覆盖了很多字段,现已回滚,想执行一条sql语句查询出数据库中200多张表所有存在默认值的字段,手动找出效率太低。

-- sql server我就知道,其他没用过。
-- tableName表名,sqlName列名,defaultVal就是默认值,字符串表示
SELECT  
a.colorder as colOrder, 
d.name as tableName,
a.name as sqlName, 
convert(int,case when COLUMNPROPERTY( a.id,a.name,'IsIdentity')=1 then 1 else 0 end) as isIndex, 
convert(int,case when exists(SELECT 1 FROM sysobjects where xtype='PK' and parent_obj=a.id and name in ( 
 SELECT name FROM sysindexes WHERE indid in( SELECT indid FROM sysindexkeys WHERE id = a.id AND colid=a.colid))) then 1 else 0 end) as isPk, 
b.name as sqlTypeName, 
a.length as 'length', 
convert(int,COLUMNPROPERTY(a.id,a.name,'PRECISION')) as 'size', 
convert(int,isnull(COLUMNPROPERTY(a.id,a.name,'Scale'),0)) as 'scale', 
convert(int,case when a.isnullable=1 then 1 else 0 end) as 'nullable', 
convert(varchar(100), isnull(e.text,'')) as defaultVal, 
convert(varchar(255), isnull(g.[value],'')) as remarks 
 FROM  
syscolumns a 
 left 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 join  
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   
 left join 
 sys.extended_properties f 
 on  
d.id=f.major_id and f.minor_id=0 
 where  1=1
-- d.name=?  
 order by  
a.id,a.colorder

参考技术A 假如你要查看user1用户下的所有表:
以user1身份登录oracle,然后执行:
select table_name from user_tables;

select table_name from tabs;

SQL查询从通配符列等于值的所有表中选择所有行[重复]

【中文标题】SQL查询从通配符列等于值的所有表中选择所有行[重复]【英文标题】:SQL query to select all rows from all tables where a wildcard column equals a value [duplicate] 【发布时间】:2014-02-16 20:42:18 【问题描述】:

如何使用SELECT * FROM * WHERE % = 'name' 之类的查询来扫描我的数据库中的所有表以查找name

【问题讨论】:

【参考方案1】:

您的选择语句缺少一列。 所以可能像 SELECT * FROM * WHERE $col = '%name';

php(比如 bash)之外的快速而肮脏的答案是

第一步找到数据库中的表。表=mysql -uuser -psecret MYDB -B -e 'show tables'|sed -e '2,$p' 第 2 步;使用 $tables var 将您的 select 语句替换为 FROM * 来迭代表。 步骤 2.5 迭代时将结果收集到一个变量中作为数组或映射。 第三步;检查那张地图。

这一切都说了,除非 $col 在所有表中都是通用的,否则这个问题没有意义。

【讨论】:

以上是关于如何从数据库查询各表中所有存在默认值的字段的主要内容,如果未能解决你的问题,请参考以下文章

在oracle中怎么查一个表中的的一个字段的重复数据

hive使用动态分区时如果动态分区的字段存在空值的问题

Mysql数据库的增删改查

ORACLE怎么根据字段值找出所有的表和字段?

sql 查所有表中是不是有某个值

SQL语句 怎么把从一个表中查出来数据插入到另一个表中