Вставьте R DataFrame в таблицу SQL Server

Я застрял на этом пару дней... Я не могу найти, в чем проблема. Я использую R в Spotfire. Я пытаюсь вставить результаты фрейма данных в таблицу SQL Server 2014. Это пример того, что я использую:

install.packages("ODBC")
install.packages("DBI")


library(DBI)
library(odbc)

con <- dbConnect(odbc(),
             Driver = "SQL Server",
             Server = "ServerName",
             Database = "DatabaseName",
             UID = "UserName",
             PWD = "Password")
dbWriteTable(conn = con, 
         name = "SQlServerTableDestinationName", 
         value = Datatable)

Я получаю эту ошибку:

TIBCO Enterprise Runtime для R вернул ошибку: "Ошибка в.loadNamespaceImpl(пакет, путь, keep.source, частичный): ошибка при выполнении useDynLib для динамической библиотеки" rlang "из пакета" rlang ", загруженного из P:/TERR/x86_64-pc-windows-library/4.2: ошибка в library.dynam(chname = chname, package = package, lib.loc = ...: не удалось загрузить чужой двоичный язык).

Спасибо!

3 ответа

Решение

Пожалуйста, следуйте предложению сообщества TIBCO, предлагаемому здесь: https://community.tibco.com/wiki/tibcor-enterprise-runtime-r-fast-writeback-sql-server-2016

В вашем случае это будет примерно так:

dbcon <- RODBC::odbcDriverConnect(connection_string )
RODBC::sqlSave(dbcon, dat =  dataf, "SQlServerTableDestinationName")

Пожалуйста, дайте мне знать, если это поможет

Поскольку вставка INTO ограничена 1000 строками, вы можете использовать dbBulkCopy из пакета rsqlserver.

dbBulkCopy - это расширение DBI, которое связывает популярную утилиту командной строки Microsoft SQL Server с именем bcp для быстрого массового копирования больших файлов в таблицу. Например:

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)

Я попробовал это, и это, наконец, сработало

install.packages("RODBC")
library(RODBC)

dbcon <- RODBC::odbcDriverConnect('driver={SQL    Server};server=ServerName;database=DatabaseName;uid=UserName;pwd=Password' )
sqlSave(dbcon, DataFrame, "SQLServerName", verbose=TRUE, fast=TRUE, append=TRUE, rownames = FALSE)
Другие вопросы по тегам