7

是否可以使用 RODBC 包批量插入 MS-SQL Server(2000、2005、2008)?

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

4

6 回答 6

5

检查新的odbcDBI包。DBI::dbWriteTable每秒写入大约 20,000 条记录...比 Row Inserts 快得多RODBC::sqlSave()

于 2017-02-27T15:07:22.597 回答
2

?sqlSave当您INSERT INTO设置Fast=True.

于 2009-09-30T17:32:58.307 回答
2

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

一个典型的场景:

  1. 你创建一个矩阵
  2. 您将其保存为 csv 文件
  3. 您调用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)
于 2013-11-10T23:38:56.583 回答
2

使用 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 可以从中读取。

于 2018-03-10T17:03:47.117 回答
1

从我能找到的一切来看,没有批量插入 MySQL 的解决方案,也没有任何适用于 SSIS 的解决方案,这就是为什么微软在购买 Revolution R Analytics 后将数据库内分析与 SQL Server 2016 结合起来。

我试图评论先前的答案,但没有这样做的声誉。

rsqlserver包需要运行,rClr并且这些包都没有表现良好,特别是因为rsqlserver's INSERT 函数的数据类型处理很差。因此,如果您使用它,您将不知道您在 SQL 表中查看的是什么,因为您的 data.frame 中的大部分信息都将被转换。

考虑到该RODBC软件包已经存在了 15 年,我很失望没有人创建批量插入功能......

于 2015-08-19T14:05:56.090 回答
1

我们的n2khelperbcp在可用时可以使用(批量复制)。当不可用时,它会退回到多个 INSERT 语句。

您可以在https://github.com/INBO-Natura2000/n2khelper上找到该软件包

安装它devtools::install_git("INBO-Natura2000/n2khelper")并寻找odbc_insert()功能。

于 2016-04-21T10:28:26.633 回答