请帮忙:如何用SQL语句获取取的unique索引字段信息?
我有一个涉及到几十上百个表的数据库,由于需要倒入大量数据,但因为许多表都建有唯一性索引,现在想获取每个表的哪些字段被定义为唯一性索引,想根据这些唯一性索引先对原表数据针对需要倒入的数据进行清理,然后倒入新数据。请问:如何通过SQL语句获取每个表的唯一性索引字段?
我的操作系统为:CentOS 5.3 x86
数据库为:IDS 11.5 UC5 x86 dbschema 导出该数据库下的所有表结构,然后再grep 关键字 ,这样可以吧。。。 这个做法是可以,但是我没法做成自动更新的脚本,也就是说,我想自动产生一个文本文件,里面就包含了每个表名以及对应的唯一性索引字段名。
如果使用grep的话,当我对表结构进行了调整之后,我没法自动更新这个文本文件。
有没有更好的办法呀? 那就用系统表,systables,syscolumns,sysindexes去查,
不过不管哪种方法,最后还是要对文本处理的。 我是想通过SQL语句利用shell脚本,自动产生一个文本文件,格式如下:
表名|唯一性索引字段名(如有多个,用逗号分隔)|
例如有一个库有三个名,分别为:
tab1,唯一性索引字段有:rec11,rec12,rec13
tab2,唯一性索引字段有:rec22
tab3,无唯一性索引
则生成以下内容的文本文件:
tab1|rec11,rec12,rec13|
tab2|rec22|
tab3|| 1、先找出有唯一索引的表,选出字段以满足tab|rec|的格式,然后处理成符合要求的格式,写入文件
2、剩下的就是不含唯一索引的表。再附加到文件后面。 能不能更详细点的说明呀?
我现在就是没办法通过SQL语句取得哪些表的某些字段有唯一性索引。 你自己难道一点都不思考的吗?
找出唯一索引:
select a.tabname,a.tabid,b.part1,b.part2....
from systables a,sysindexes b
where a.tabname='TABNAME' and a.tabid=b.tabid and b.idxtype='U'
into temp tmp_aaa;
unload to tmp_aaa.txt
select a.tabname,
(select d.colname from tmp_aaa c,syscolumns d where c.tabid=d.tabid and c.part1=d.colno),
...
from tmp_aaa a;
select语句大概如此
得到的文本格式为:tabname|col1|col2|...|
然后再对此文本处理
awk -F"|" '{printf $1"|"$2;for(i=3;i<NF;i++)if($i!=NULL)printf ","$i}print "|"}' tmp_aaa.txt
输出的就是要求的格式。
有多个表的话,你就放到脚本里处理吧 非常感谢楼上的帮助。
这下应该可以解决了。
页:
[1]