尝试了一些在线找到的不同程序包和方法后,我还没有找到一种解决方案,该解决方案可用于将R中的数据帧插入SQL Server中的现有表中。 我使用MySQL取得了很大的成功,但是SQL Server似乎更加困难。
我设法使用DBI包编写了一个新表,但是我找不到使用此方法插入的方法。查看文档,似乎没有插入的方法。
由于有1000多个数据行,使用RODBC包中的sqlQuery似乎也不可行。
有人可以建议一种将数据帧中的大量数据插入现有SQL表中的有效方法吗?
答案 0 :(得分:2)
我使用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;")