标准的RODBC软件包的sqlSave功能即使是单个INSERT语句(参数fast = TRUE)对于大量数据由于非最小加载而言非常慢.我将如何使用最少的日志记录将数据写入我的sql服务器,以便它写得更快?
目前尝试:
tosql = data.frame(...); sqlSave(channel,tosql,tablename="Table1",rownames=FALSE,colnames=FALSE,safer=FALSE,fast=TRUE);
解决方法
通过将数据写入本地CSV,然后使用BULK INSERT(不能随时作为类似于sqlSave的预构建函数),数据可以很快写入MS sql Server.
tosql = data.frame(...); write.table(tosql,"C:\\export\\filename.txt",quote=FALSE,sep=",",row.names=FALSE,col.names=FALSE,append=FALSE); sqlQuery(channel,"BULK INSERT Yada.dbo.yada FROM '\\\\<server-that-sql-server-can-see>\\export\\filename.txt' WITH ( FIELDTERMINATOR = ',',ROWTERMINATOR = '\\n' )");
sql Server必须具有访问保存CSV文件的网络文件夹的权限,否则此过程将无法正常工作.虽然它需要一些设置与各种权限(网络文件夹和BULK ADMIN权限,奖励的速度无限更有价值).