是否可以使用RODBC包对MS-SQL Server(2000,2005,2008)执行批量插入?
我知道我可以使用freebcp来做到这一点,但我很好奇RODBC软件包是否实现了Microsoft SQL API的这一部分,如果没有,实现它有多困难。
答案 0 :(得分:4)
查看新的odbc
和DBI
个包。 DBI::dbWriteTable
每秒写入大约20,000条记录...比RODBC::sqlSave()
答案 1 :(得分:2)
当您设置INSERT INTO
时,您可能正在寻找使用参数化Fast=True
查询(在一次操作中发生)的?sqlSave
。
答案 2 :(得分:2)
现在,您可以使用新rsqlserver包中的dbBulkCopy
:
典型情况:
dbBulkCopy
来阅读fil并使用MS Sql server的内部bcp
工具插入它。这假设您的表已在数据库中创建:
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)
答案 3 :(得分:1)
从我能找到的所有内容中,没有任何解决方案可以批量插入MySQL,也没有任何与SSIS兼容的解决方案,这就是为什么微软在购买Revolution R Analytics后将SQL Server 2016纳入数据库内分析的原因。
我试图对之前的答案发表评论,但没有声誉。
rsqlserver
包需要与rClr
一起运行,并且这些包都不是很好,特别是因为rsqlserver
的INSERT函数处理数据类型不佳。因此,如果你使用它,你将不知道你在SQL表中看到了什么,因为data.frame中的大部分信息都将被转换。
考虑到RODBC
包已经存在了15年,我很失望没有人创建了批量插入函数...
答案 4 :(得分:1)
我们的n2khelper
包可以使用bcp
(批量复制)。当它不可用时,它会回退到多个INSERT语句。
您可以在https://github.com/INBO-Natura2000/n2khelper
上找到该套餐使用devtools::install_git("INBO-Natura2000/n2khelper")
安装它并查找odbc_insert()
功能。
答案 5 :(得分:1)
使用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可以读取从