是否可以使用 RODBC 包批量插入 MS-SQL Server(2000、2005、2008)?
我知道我可以使用 freebcp 做到这一点,但我很好奇 RODBC 包是否实现了 Microsoft SQL API 的这一部分,如果没有,实现它会有多困难。
检查新的odbc和DBI包。DBI::dbWriteTable每秒写入大约 20,000 条记录...比 Row Inserts 快得多RODBC::sqlSave()
?sqlSave当您INSERT INTO设置Fast=True.
现在您可以  dbBulkCopy  从新的rsqlserver  包中使用:
一个典型的场景:
dbBulkCopy读取 fil 并使用bcpMS 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)
    使用 RODBC,我们能够创建的最快插入(2.6 亿行插入)如下所示(在 R 伪代码中):
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 服务器可以写入的网络驱动器(例如,一个有权写入数据库的服务器使用 Rscript 来生产代码),并且 SQL Server 可以从中读取。
从我能找到的一切来看,没有批量插入 MySQL 的解决方案,也没有任何适用于 SSIS 的解决方案,这就是为什么微软在购买 Revolution R Analytics 后将数据库内分析与 SQL Server 2016 结合起来。
我试图评论先前的答案,但没有这样做的声誉。
该rsqlserver包需要运行,rClr并且这些包都没有表现良好,特别是因为rsqlserver's INSERT 函数的数据类型处理很差。因此,如果您使用它,您将不知道您在 SQL 表中查看的是什么,因为您的 data.frame 中的大部分信息都将被转换。
考虑到该RODBC软件包已经存在了 15 年,我很失望没有人创建批量插入功能......
我们的n2khelper包bcp在可用时可以使用(批量复制)。当不可用时,它会退回到多个 INSERT 语句。
您可以在https://github.com/INBO-Natura2000/n2khelper上找到该软件包
安装它devtools::install_git("INBO-Natura2000/n2khelper")并寻找odbc_insert()功能。