首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > VFP >

谋求批量插入远程数据的方案

2012-08-21 
寻求批量插入远程数据的方案需要将数据批量插入远程服务器,远程服务器是SQL,用什么方案效率最高、速度最快?

寻求批量插入远程数据的方案
需要将数据批量插入远程服务器,远程服务器是SQL,用什么方案效率最高、速度最快?

例如:本地数据有10000条,

日期 品名 数量
2012.06.06 中华牙膏 20
2012.06.06 白玉牙膏 50
。。。
。。。
。。。

我用如下代码测试了一下,上当了,等了半小时多!!
?sqlstringconnect("Driver=SQL Server;Server=192.168.0.2;Address=XX.XX.XX.XX,1500;Network=dbmssocn;Database=yjtest;Uid=wxj;Pwd=123")
SET TALK off

FOR i=1 TO 10000
SQLEXEC(1,"insert into ydj values('2012.06.06','阿莫西林',12)")
endf
SET TALK on

RETURN


然后我改一下,记录了时间,300条记录花了70秒

我的网络上行速率是512K

什么方案效率高?应该在哪些方面进行优化?比如说充分利用字节长度等等


有可能同时多个站点上传数据,这样会不会死人?



[解决办法]
如果 sql server 所在服务器安装了 ftp,那就先将数据整理成符合字段顺序的格式化文本文件,上传文件,再导入 sql server
ftp 传文件就不用说了,只说说导入 sql server
最快的应该是 bulk insert 命令了,简化的语法是这样的:

SQL code
BULK INSERT 被插入表名FROM 'C:\数据文件.txt'  WITH  (    FIELDTERMINATOR = ",",     -- 指定逗号作为字段分隔符,默认是制表符 \t    ROWTERMINATOR = "\n"       -- 指定 回车符号作为 行分隔符,默认是 \r\n)
[解决办法]
1、从环境角度应该提高网速(本机网速和远程服务器网速)和服务器的配置性通。
2、ftp的方法,本觉得不可取,因为,还得需要远程服务端导入入数据库的操作。
3、关于【bulk insert】方法,确实能够提高插入速度,效果明显,这里有更详细的中文讲解,你可以参考一下:
http://blog.csdn.net/jackmacro/article/details/5959321
4、按照你的数据,300条记录如果用了70秒时间,那你的网速太慢了,不是服务器端,就是你本机,现在家庭都是2-4M的宽带,你可以换一个家庭4M机器试试,看速度有无提高。另外,是不是你用的是10000条数据,
FOR i=1 TO 10000
SQLEXEC(1,"insert into ydj values('2012.06.06','阿莫西林',12)")
endf
&& 是不是10000,把10000改成300
5、通过文本文件进行处理,速度也很快,参考下面的帖子。
http://www.itpub.net/thread-139879-4-1.html
[解决办法]
循环不用考虑,
1、用SQLSERVER的OPENDATESOURCE、OPENQUERY、BULK;
2、用JETSQL,假设连接SQLSERVER,并有相应权限,且字段类型没有特殊(如GEN、BLOB之类)
SELECT * INTO [dbase 5.0;database=r:\temp].aa FROM [ODBC;Driver=SQL Server;UID=sa;PWD=123;Server=tmp;DataBase=tmp].bb;

[解决办法]
提高网速也是比较重要的。

热点排行