在尝试了一些在线发现的不同包和方法后,我还没有找到一个解决方案,可以将R中的数据帧插入到SQL Server中的现有表中。我用MySQL做了很多成功,但SQL Server似乎更难。
我已经设法使用DBI包编写了一个新表,但我找不到插入使用此方法的方法。查看文档,似乎没有一种插入方式。
由于有超过1000行数据,使用RODBC包中的sqlQuery似乎也不可行。
任何人都可以提出一种工作方法,将大量数据从数据框插入到现有的SQL表中吗?
我使用r-postgres特定的驱动程序使用R和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;")