浅谈数据转换(导入,导出)的快速解决方法
因为工作需要,经常需要操作数据转换的工作。比如:从dz导入到pw,或从新云导入到5ucms,把数据从这个表导入到那个表。操作的多了,认为自己对数据库转化还是有一定的研究的,今天写出了,希望能对做同样工作的朋友一些帮助或者启发。
一般我完成数据库转换的脚本选择vbscript。原因吗,简单当然是一个很重要的因素,更重要的常用的数据库(如:MySQL)都有ADO的驱动。
数据库转化第一步,先要确定目的数据库的类型和当前数据库的类型。如果access数据库转换成mysql数据库。则需要先去下载MySQL ADO的驱动。
第二步,连接好数据库了,现在要分析数据库对应的字段之间的关系。如果能把需要操作的数据表的字段导出来应该能快很多。既然选择了vbscript脚本,我们就让他来帮忙。
'Auth:猫七(Miaoqiyuan.cn)
'outTableCol(表名)
'Desc:返回某表的所有字段
function outTableCol(tbl)
tablesCol=""
set rs=createobject("ADODB.Recordset")
rs.open "select top 1 * from "&tbl,conn,1,1
for i=0 to rs.fields.count-1
tablesCol=tablesCol & rs.fields(i).name & ","
next
outTableCol=tablesCol
rs.close
set rs=nothing
end function
直接使用Wscript.echo outTableCol(表名),哈哈,表明全输出来了(最好将vbscript的脚本宿主改成cscript)。
第三步,字段的对应关系分析好了,自然要进入实质性的过程了-插入数据。
insert into 语句?No,我们用ADODB.Recordset。使用MySQL数据库的使用ADODB也可以使用哦,这也是我使用vbscript的另一个原因,vbscript对ado的兼容性不用我说了吧。。。确定了用ADODB.Recordset,写这种Rs(..)=Rs(..)的方式也是挺麻烦的,现在我们再次请vbscript出山。
'Auth:猫七(Miaoqiyuan.cn)
'CreateRsStr(字段名,用','分隔,两个字段间的转换用=>)
'例如:
'CreateRsStr "d_id,d_dme" #Rs1("d_id")=Rs2("d_id")
'CreateRsStr "d_id=>c_id" #Rs1("c_id")=Rs2("d_id")
'生成Rs1到Rs2的复制字符串
function CreateRsStr(str)
strDb=split(str,",")
StrOut=""
for each Col in strDb
if Trim(Col) <>"" then
if instr(Col,"=>")>0 then
ColDb=Split(Col,"=>")
if Trim(ColDb(0)) <> "" and Trim(ColDb(1)) <> "" then
StrOut=StrOut & "Rs1(""" & ColDb(1) & """)=Rs2(""" & ColDb(0) & """)" & VbCrlf
end if
else
StrOut=StrOut & "Rs1(""" & Col & """)=Rs2(""" & Col & """)" & VbCrlf
end if
end if
next
CreateRsStr=StrOut
end function
Wscript.echo CreateRsStr(“d_id,d_regstt,d_cpr,d_cprnme,d_urlpri,d_dnspri,d_prd”)一下,看看出来了什么?哈哈,是不是出现了
'Rs1("d_id")=Rs2("d_id")
Rs1("d_regstt")=Rs2("d_regstt")
Rs1("d_cpr")=Rs2("d_cpr")
Rs1("d_cprnme")=Rs2("d_cprnme")
Rs1("d_urlpri")=Rs2("d_urlpri")
Rs1("d_dnspri")=Rs2("d_dnspri")
Rs1("d_prd")=Rs2("d_prd")
我们直接把他复制到程序中就可以了。上边的是相同字段名的情况,如果字段名不相同,CreateRsStr也可以处理,Wscript.echo CreateRsStr(“d_id=>a_id,d_regstt=>a_regstt”)。
然后update更新就可以了,导数据简单吧,如果您有更好的方法,欢迎和我联系,我的博客是http://www.miaoqiyuan.cn