У меня были аналогичные потребности при использовании 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;")