如何将数据帧插入SQL Server表?

时间:2013-01-15 09:42:33

标签: r rodbc

我正在尝试将数据帧上传到SQL Server表,我尝试将其分解为一个简单的SQL查询字符串..

library(RODBC)
con <- odbcDriverConnect("driver=SQL Server; server=database")

df <- data.frame(a=1:10, b=10:1, c=11:20)

values <- paste("(",df$a,",", df$b,",",df$c,")", sep="", collapse=",")

cmd <- paste("insert into MyTable values ", values)

result <- sqlQuery(con, cmd, as.is=TRUE)

..这似乎有效,但不能很好地扩展。有更简单的方法吗?

3 个答案:

答案 0 :(得分:19)

[编辑]或许粘贴names(df)可以解决缩放问题:

   values <- paste( " df[  , c(", 
                     paste( names(df),collapse=",") ,
                                   ")] ", collapse="" ) 
      values
      #[1] " df[  , c( a,b,c )] "

你说你的代码是“正在工作”..如果有人想“上传”,我也会想到会使用sqlSave而不是sqlQuery。

我猜想这会更有可能做你所描述的:

 sqlSave(con, df, tablename = "MyTable")

答案 1 :(得分:5)

由于insert INTO限制为1000行,因此rsqlserverdbBulkCopy包可以dbBulkCopy

url = "Server=localhost;Database=TEST_RSQLSERVER;Trusted_Connection=True;" conn <- dbConnect('SqlServer',url=url) ## I assume the table already exist dbBulkCopy(conn,name='T_BULKCOPY',value=df,overwrite=TRUE) dbDisconnect(conn) 是一个DBI扩展,它将Microsoft SQL Server流行的命名行实用程序bcp连接起来,以快速批量将大文件复制到表中。例如:

{{1}}

答案 2 :(得分:2)

这对我有用,我发现它更简单。

console.log