Comment insérer un dataframe dans une table SQL Server?
Je suis en train de télécharger un dataframe à une table SQL Server, j'ai essayé de le décomposer à une simple chaîne de requête 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)
..qui semble fonctionner mais n'est pas très bien. Est-il un moyen plus facile?
- Si la table existe, puis "ajouter" doit être VRAIE, ou l'utilisation sqlUpdate. S'il n'existe pas, j'aurais coincé avec la valeur par défaut (FALSE) dans sqlSave. J'ai lu qu'il y a de bizarre conventions de nommage pour SQL Server, mais je n'ai pas de copie, donc impossible de tester.
Vous devez vous connecter pour publier un commentaire.
[édité] peut-être coller le
names(df)
permettrait de résoudre le problème de montée en charge:Vous dire que votre code est "travail".. j'aurais aussi pensé serait d'utiliser sqlSave plutôt que sqlQuery si l'on voulait "télécharger".
J'aurais deviné ce serait plus enclin à faire ce que vous avez décrit:
values
variable, cela crée une bizarre à la recherche de chaîne?! Vous avez raison à propos de la virgule, ce serait un problème. Le "plus devis" sont à gauche de mon code d'origine.names(df)
et "[" pourrait être utilisé pour accéder à un ensemble de données.cadre par des colonnes de manière plus abstraite que ce que vous faisiez. Il aurait besoin d'uncollapse=""
oucollapse=","
pour être efficace.Depuis
insert INTO
est limité à 1000 lignes, vous pouvezdbBulkCopy
de rsqlserver paquet.dbBulkCopy
est un DBI extension interfaces de Microsoft SQL Server populaire utilitaire de ligne de commande nommé bcp rapidement en vrac de la copie de gros fichiers dans la table. Par exemple:rsqlserver'
? mieux vaut créer un problème dans rsqlserver question, je vais regarder cela de près.Cela a fonctionné pour moi et je l'ai trouvé plus simple.