一般在开发的时候,都有多个相同的数据库(比如测试环境可能有好几个(比如有开发人员使用的库,测试人员使用的数据库,还有正式环境的数据库等),但是使用的数据库是一样的,)。
现在有这样一个需求:在某个系统中,需要把该系统中的某个模块独立出来,成为一个单独的系统,但是数据还是用的老系统的数据。在新系统的开发的时候,避免不了对老系统的表结构作为更改,由于新系统还在开发中,用户使用的还是老系统,所以在新系统上线的时候,就涉及到导入数据的问题。
数据库是informix的,当时提取了老系统中需要往新系统到的数据文件,由于没有找到好的方法,所以使用的是一个个导入的。
load from /data/unload/informix.attachment.unl insert into attachment
其中attachment是表结构,attachment.unl 是informix数据库导出的数据文件(也就是表中的数据)
由于数据是从老系统的某模块导出的,而新开发的模块对表做了相应的修改,
导致有部分表的旧数据跟新表的表结构不对应,会出现错误,具体有如下一些表:
1.informix.tbl_test_certificateword
2.informix.tbl_test_giftnew
3.informix.tbl_test_group
4.informix.tbl_test_ingroup
5.informix.tbl_test_out_coursename
6.informix.tbl_test_outapplyto
7.informix.tbl_test_outgroupnum
8.informix.tbl_test_visagroup
9.informix.tbl_test_youqu
解决办法:
1.首先把现在数据库中的表的创建语句复制出来,作为备份 ,粘贴在winsql中
2.rename table tbl_test_youquto tbl_test_youqu2
使用如上语句把以前的表名称修改为另一个名字
3.对比以前对表做的操作,创建出符合原系统中新模块的表结构
4.然后使用load from /data/unload/informix.attachment.unl insert into attachment
导入数据(linux路径下区分大小写)
5.然后参考第一步中的表结构,修改现在新建的表结构(基本都是添加字段)
批量添加字段sql如下:
alter table informix.tbl_test_certificateword
add cert_birthdate VARCHAR(20),
add cert_certificatelevel VARCHAR(50),
add cert_takeplace VARCHAR(50),
add cert_belongcompany VARCHAR(50),
add cert_certificatetype VARCHAR(20)
方法2:(目前还没有测试)
在CSDN上,请教过比较熟练的朋友,说可以使用:
一般是将这100个load放到sql脚本里,然后直接执行:dbaccess 数据库名 sql脚本
英文分号分隔,最后一句后面也要有分号。
我把您说的意思这样理解:就是把100个
load from /data/unload/buss_type.unl insert into buss_type
这种语句放在一个后缀名是.sql 的文件(比如test.sql)里面,然后使用 dbaccess 数据库名 sql脚本?
ps:如果是我理解的这样的话,100个
load from /data/unload/buss_type.unl insert into buss_type
英文分号分隔,最后一句后面也要有分号。
)
参考:http://blog.csdn.net/oh_maxy/article/details/10507355#comments