您的位置:程序门 -> vb ->



如何将记录集的数据快速插入到表里。


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


如何将记录集的数据快速插入到表里。[已结贴,结贴人:liudonghan]
发表于:2007-10-25 16:18:07 楼主
程序里是这么用的
  set   oradynaset   =   objdatabase.dbcreatedynaset(sql,   0)
然后一条一条的检索,做插入的sql语句。
但是数据有好几十万条,这样做太慢了。

各位能人,有没有什么办法,将记录集里的数据快速插入到表里呢。

万分感谢!!!
发表于:2007-10-25 16:26:531楼 得分:0
数据复制?
用   insert   into   tableb   ...   select   ...   from   tablea   的方式
发表于:2007-10-25 16:41:482楼 得分:0
'目的表已经存在
insert   into   目的表(...)   select   ...   from   源表
'目的表不存在
select   ...   into   目的表名   from   源表
 
发表于:2007-10-25 16:51:013楼 得分:0
没有源表,这个数据集是从oracle里用很复杂的sql得来的,目的表是本地表。
发表于:2007-10-25 17:09:304楼 得分:0


if   (你说的数据库=sql   server)   then
        企业管理器;
          找到你要复制的表
          右键---所有任务----导出数据
          按向导填就可以了     认真填噢
else
        上面说的已经满足你了
end   if

发表于:2007-10-25 17:16:525楼 得分:0
大批量尽量用数据库自带的导入功能。
发表于:2007-10-26 09:42:446楼 得分:0
因为这是个定期导入的功能,用户希望自己通过程序解决。
所以自带的数据库导入功能不可行。
现在的问题就是已有数据集,怎样将其中的内容插入到本地表。要快!!
发表于:2007-10-26 09:50:217楼 得分:0
创建一个   insert   类型的   adodb.command,循环执行。
这样插入的   sql   命令仅需要解析一次,而不是每个插入都要解析一次,数据量大时省下的时间还是可观的。
发表于:2007-10-26 11:02:088楼 得分:0
能不能给个例子,小弟是新手,感激不尽!!
发表于:2007-10-26 11:18:349楼 得分:0
同意tiger_zhao   的意见。
发表于:2007-10-26 11:43:2310楼 得分:45
vbscript code
dim cnn as adodb.connection dim cmd as adodb.command dim prmid as adodb.parameter dim prmname as adodb.parameter dim i as long ... set cmd = new adodb.command cmd.commandtext = "insert into t1 (id,name) values(?,?)" set cmd.activeconnection = cnn cmd.prepared = true '仅对 sql 进行首次解析 set prmid = cmd.createparameter("id", adinteger, adparaminput) cmd.parameters.append prmid set prmname = cmd.createparameter("name", advarchar, adparaminput, 10) cmd.parameters.append prmname for i = 1 to 10000 prmid.value = i prmname.value = cstr(i) cmd.EXECute next
发表于:2007-10-26 11:51:3811楼 得分:0
支持左手。用   sql   命令,所有事情让数据库引擎去做。
发表于:2007-10-26 12:08:0812楼 得分:5
如果不需要每一条数据都处理的话可以先存为一个xml文件,然后插入新数据
rs.save   aaa.xml
然后用
insert   into   tableb   ...   select   ...   from   tablea   的方式

如果需要一条条的处理,那就用批处理的方式.
这至少又有两种方法,第一种是用
conn.begintrans
do   while   not   rs.eof
        strsql="insert   into   ........"
        conn.EXECute   strsql
        rs.movenext
loop
conn.committrans

另一种就是打开一个adodb.command.具体请参看帮助文件.大意也是差不多,就是最后执行插入动作时是一次性执行.
十几万条,想快也很难快起来



快速检索

最新资讯
热门点击