MS-SQL批量插入与RODBC(MS-SQL Bulk Insert with RODBC)

2019-07-17 13:33发布

是否有可能进行批量插入到使用RODBC包的MS-SQL服务器(2000年,2005年,2008年)?

我知道我可以使用freebcp做到这一点,但我很好奇,如果RODBC包实现微软SQL API的这一部分,如果没有,那将是多么困难的实现它。

Answer 1:

检查出的新的odbcDBI包。 DBI::dbWriteTable写道大约20,000记录每秒......远远高于从行插入快得多RODBC::sqlSave()



Answer 2:

你可能找?sqlSave它采用了参数化的INSERT INTO查询(发生在一个操作中),当您设置Fast=True



Answer 3:

现在,您可以使用dbBulkCopy从新rsqlserver包:

一个典型的例子:

  1. 您创建一个矩阵
  2. 您将其保存为CSV文件
  3. 你叫dbBulkCopy阅读FIL和使用内部插入bcp MS SQL服务器的工具。

这假设你的表在数据库中已经创建:

dat <- matrix(round(rnorm(nrow*ncol),nrow,ncol)
id.file = "temp_file.csv"                      
write.csv(dat,file=id.file,row.names=FALSE)
dbBulkCopy(conn,'NEW_BP_TABLE',value=id.file)


Answer 4:

从一切我能找到,对于批量插入到MySQL并没有什么与SSIS工作无解这就是为什么微软包括买转速R分析后,数据库内分析与SQL Server 2016年

我想在前面的回答发表评论,但没有信誉做。

rsqlserver包需要与运行rClr并没有那些包的是乖巧的,尤其是因为rsqlserver的INSERT功能有差数据类型处理。 所以,如果你使用它,你会不知道你正在寻找在SQL表尽可能多的在你的data.frame中的信息将被改造的东西。

考虑到RODBC包已经有15年了,我很失望,没有人创造了一个批量插入功能...



Answer 5:

我们n2khelper包可以使用bcp (bulkcopy)可用时。 如果不存在,它回落到多个INSERT语句。

你可以找到包https://github.com/INBO-Natura2000/n2khelper

与安装devtools::install_git("INBO-Natura2000/n2khelper")并查找odbc_insert()函数。



Answer 6:

使用RODBC,最快的插入,我们已经能够创建(260万行的插入)如下所示(在读伪代码):

ourDataFrame <- sqlQuery(OurConnection, "SELECT myDataThing1, myDataThing2
                                         FROM myData")
ourDF <- doStuff(ourDataFrame)
write.csv(ourDF,ourFile)  
sqlQuery(OurConnection, "CREATE TABLE myTable ( la [La], laLa [LaLa]);
                         BULK INSERT myTable FROM 'ourFile' 
                              WITH YOURPARAMS=yourParams;")

如果你从服务器之间运行这一点,你需要的是R服务器可以写入到网络驱动器(例如,一个服务器的写入权限DB使用RSCRIPT到productionalize的代码),而SQL Server可以读出。



文章来源: MS-SQL Bulk Insert with RODBC
标签: sql r rodbc