如何将R数据框插入SQL Server中的现有表

如何将R数据框插入SQL Server中的现有表,sql,r,sql-server,odbc,Sql,R,Sql Server,Odbc,在尝试了一些在线发现的不同包和方法之后,我还没有找到一个解决方案,可以将R中的数据帧插入SQL Server中的现有表中。 我在MySQL上取得了巨大成功,但SQL Server似乎更难 我已经设法使用DBI包编写了一个新表,但是我找不到使用此方法插入的方法。查看文档,似乎没有插入的方法 由于有1000多行数据,使用RODBC包中的sqlQuery似乎也不可行 有人能推荐一种将大量数据从数据帧插入现有SQL表的工作方法吗 我对使用R和使用R-postgres特定驱动程序的PostGreSQL也有

在尝试了一些在线发现的不同包和方法之后,我还没有找到一个解决方案,可以将R中的数据帧插入SQL Server中的现有表中。 我在MySQL上取得了巨大成功,但SQL Server似乎更难

我已经设法使用DBI包编写了一个新表,但是我找不到使用此方法插入的方法。查看文档,似乎没有插入的方法

由于有1000多行数据,使用RODBC包中的sqlQuery似乎也不可行


有人能推荐一种将大量数据从数据帧插入现有SQL表的工作方法吗

我对使用R和使用R-postgres特定驱动程序的PostGreSQL也有类似的需求。我认为SQLServer可能存在类似的问题。我发现的最佳解决方案是使用dbWriteTable或一个底层函数写入数据库中的临时表,从流中写入以加载非常大的表(例如,对于Postgres,postgresqlCopyInDataframe)。后者通常需要更多的工作来定义和对齐SQL数据类型和R类类型,以确保编写,而dbWriteTable则更容易一些。写入临时表后,发出SQL语句插入到表中,就像在数据库环境中一样。下面是使用高级DBI库数据库调用的示例:

  dbExecute(conn,"start transaction;")
  dbExecute(conn,"drop table if exists myTempTable")
  dbWriteTable(conn,"myTempTable",df)
  dbExecute(conn,"insert into myRealTable(a,b,c) select a,b,c from myTempTable")
  dbExecute(conn,"drop table if exists myTempTable")
  dbExecute(conn,"commit;")

我对使用R和PostGreSQL使用R-postgres特定的驱动程序也有类似的需求。我认为SQLServer可能存在类似的问题。我发现的最佳解决方案是使用dbWriteTable或一个底层函数写入数据库中的临时表,从流中写入以加载非常大的表(例如,对于Postgres,postgresqlCopyInDataframe)。后者通常需要更多的工作来定义和对齐SQL数据类型和R类类型,以确保编写,而dbWriteTable则更容易一些。写入临时表后,发出SQL语句插入到表中,就像在数据库环境中一样。下面是使用高级DBI库数据库调用的示例:

  dbExecute(conn,"start transaction;")
  dbExecute(conn,"drop table if exists myTempTable")
  dbWriteTable(conn,"myTempTable",df)
  dbExecute(conn,"insert into myRealTable(a,b,c) select a,b,c from myTempTable")
  dbExecute(conn,"drop table if exists myTempTable")
  dbExecute(conn,"commit;")

我建议使用library()和
dbWriteTable(myCon,“myTable”,myTable,append=TRUE)
dbExecute(myCon,sprintf(“INSERT INTO myTable VALUES(%s);”,paste(myValues,collapse=“),(”)
构造。请参阅本主题中相关的和有用的内容。SQL Server中的最大1000行插入限制是否仍会限制此内容?很遗憾,是的。在我的例子中,我编写了一个循环,将数据插入1000行批处理中。我建议使用library()和
dbWriteTable(myCon,“myTable”,myTable,append=TRUE)
dbExecute(myCon,sprintf(“INSERT-INTO-myTable-VALUES(%s);”,粘贴(myValues,collapse=“),(“”))
构造。请参阅本主题中相关的和有用的内容。SQL Server中的最大1000行插入限制是否仍会限制此内容?很遗憾,是的。在我的例子中,我编写了一个循环,它以1000行批量插入数据。