conectar sql con r
¿Cómo insertar un marco de datos en una tabla de SQL Server? (3)
Estoy tratando de cargar un marco de datos en una tabla de SQL Server. Intenté dividirlo en una simple cadena de consulta 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)
..que parece funcionar pero no se escala muy bien. hay una manera mas facil?
Dado que la insert INTO
está limitada a 1000 filas, puede dbBulkCopy
desde el paquete rsqlserver .
dbBulkCopy
es una extensión DBI que interactúa con la popular utilidad de línea de comandos de Microsoft SQL Server llamada bcp para copiar rápidamente archivos grandes en la tabla. Por ejemplo:
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)
Esto funcionó para mí y me pareció más simple.
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
[editado] Quizás pegar los names(df)
podría resolver el problema de escalado:
values <- paste( " df[ , c(",
paste( names(df),collapse=",") ,
")] ", collapse="" )
values
#[1] " df[ , c( a,b,c )] "
Usted dice que su código está "funcionando" ... También hubiera pensado que uno usaría sqlSave en lugar de sqlQuery si uno quisiera "subir".
Habría adivinado que esto sería más probable que hiciera lo que describiste:
sqlSave(con, df, tablename = "MyTable")