Как вставить данные в таблицу SQL Server?
Я пытаюсь загрузить фрейм данных в таблицу SQL Server, я попытался разбить его на простую строку запроса SQL.
library(RODBC)
con <- odbcDriverConnect("driver=SQL Server; server=database")
df <- data.frame(a=1:10, b=10:1, c=11:20)
values <- paste("(",df$a,",", df$b,",",df$c,")", sep="", collapse=",")
cmd <- paste("insert into MyTable values ", values)
result <- sqlQuery(con, cmd, as.is=TRUE)
.. который, похоже, работает, но не очень хорошо масштабируется. Есть ли более простой способ?
Ответы
Ответ 1
[edit] Возможно, вставка names(df)
решит проблему масштабирования:
values <- paste( " df[ , c(",
paste( names(df),collapse=",") ,
")] ", collapse="" )
values
#[1] " df[ , c( a,b,c )] "
Вы говорите, что ваш код "работает". Я бы также подумал, что использовать sqlSave вместо sqlQuery, если захочет "загрузить".
Я бы предположил, что с большей вероятностью будет делать то, что вы описали:
sqlSave(con, df, tablename = "MyTable")
Ответ 2
Так как insert 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)
Ответ 3
Это сработало для меня, и я нашел, что это проще.
library(sqldf)
library(odbc)
con <- dbConnect(odbc(),
Driver = "SQL Server",
Server = "ServerName",
Database = "DBName",
UID = "UserName",
PWD = "Password")
dbWriteTable(conn = con,
name = "TableName",
value = x) ## x is any data frame