2017-09-23 6 views
0

J'ai un cadre de données avec plusieurs colonnes dépassant 255 caractères, lorsque j'essaie d'importer la trame de données sur le serveur SQL en utilisant le code ci-dessous, plusieurs colonnes sont tronquées à 255 caractères.Importer une trame de données de R vers le serveur SQL à l'aide de sqlSave() mais la colonne est tronquée à 255 octets?

myconn <- odbcDriverConnect("db_name") 
sqlSave(myconn, my_data, tablename = "Table_1" ,rownames=FALSE, append = TRUE) 

choses que j'ai essayé, mais ne fonctionne pas:

J'ai essayé de créer la table dans sql avant d'importer les données de R, mais cela ne fonctionne pas:

CREATE TABLE TEST_Table 
(
     [Column_1] nvarchar(max), 
     [Column_2] nvarchar(max), 
     [Column_3] nvarchar(max) 
); 

J'ai également essayé de spécifier varTypes comme ci-dessous avant d'importer les données:

columnTypes <- list(Column_1 = "nvarchar(max)", Column_2 = "nvarchar(max)", Column_3 = "nvarchar(max)") 
sqlSave(myconn, my_data, tablename = "Table_1" ,rownames=FALSE, append = TRUE, varTypes=columnTypes) 

Que peut-on faire d'autre pour écrire ce cadre de données dans la base de données en tant que table sans tronquer les chaînes de caractères?

+0

Le seul succès que j'ai eu pousser des données de R à SQL était en construisant d'énormes déclarations de 'INSERT' avec suffisamment de chaînes sql. – lebelinoz

+0

@ lebelinoz- pouvez-vous fournir la syntaxe ou un exemple pour les instructions INSERT? C'est nouveau pour moi et ça vaut le coup d'essayer. Merci. – Curious

+0

Je vais donner comme une réponse ci-dessous, mais je ne suis pas sûr si c'est ce dont vous avez besoin. – lebelinoz

Répondre

1

Une solution alternative est

library (RODBCext) 
channel <- odbcConnect (...) 

sqlExecute (channel, 
      "INSERT INTO Table_1 
      (Column_1, Column_2, Column_3) 
      VALUES (?,?,?)", 
      data = df [c ("Column_1", "Column_2", "Column_3")]) 
+0

@ Benjamin- cela a effectivement fonctionné !! THX. – Curious

0

Le seul succès que j'ai eu à pousser des données de R vers SQL était en construisant d'énormes instructions INSERT avec d'énormes chaînes sql. Donc, en supposant que j'avais Table_1 déjà sur ma base de données et je veux insérer simple dataframe df comme

Column_1 Column_2 Column_3 
-------------------------------- 
Fred  Wilma  Pebbles 
Barney Betty  Bambam 

Ensuite, je construis une chaîne sql dans R comme

sql = "INSERT Table_1 (Column_1, Column_2, Column_3) 
     VALUES ('Fred', 'Wilma', 'Pebbles'), ('Barney', 'Betty', 'Bambam')" 

et courir que sur une Connexion RODBC.