标签归档:db

浅谈数据转换(导入,导出)的快速解决方法

因为工作需要,经常需要操作数据转换的工作。比如:从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