2016-05-15 34 views
3

angefügt werden Ich versuche, eine SQL-Tabelle mithilfe der Funktion sqlSave des RODBC-Pakets in R zu aktualisieren. Daten sind in einem Datenrahmen vorhanden. Wenn ich versuche, den Befehl auszuführen:Kann nicht an SQL Server-Tabelle mit sqlSave in R

sqlSave(DBConn, dat=df, verbose=T, tablename='table', append=T) 

bekomme ich folgende Fehlermeldung:

Query: INSERT INTO "table" ("col1", "col2", "col3", "col4") VALUES (?,?,?,?,?) 
sqlwrite returned 
42000 -131 [Sybase][ODBC Driver][Sybase IQ]Syntax error near 'table' on line 1 
[RODBC] ERROR: Could not SQLPrepare 'INSERT INTO "table" ("col1", "col2", "col3", "col4") VALUES (?,?,?,?,?)' 

Was mache ich falsch hier zu tun, so dass ich nicht die Werte in SQLQuery bekommen?

Vielen Dank für jede Hilfe im Voraus

EDIT 1 nach @Gordon Kommentar:

Fehler zeigt 5 Platzhalter, aber meine data.frame hat nur 4 Spalten. Ich habe Dim (df) und bekam 4. Ist es irgendwie mit dem Zeilenindex von df verwandt?

EDIT 2

Auf der folgenden Aktionen ausführen:

sqlSave(DBConn, dat=df, verbose=T, tablename='table', append=T) 

Der Fehler jetzt ich erhalte, ist immer noch das gleiche mit 4 Platzhalter statt, aber alle Werte sind noch (?,?,?,?)

EDIT 3

Ich versuchte mit s qlUpdate auch

sqlUpdate(DBConn, dat=df, verbose=T, tablename='table') 

Fehler, die ich jetzt habe ist:

Query: UPDATE "table" SET "col2"=?, "col3"=?, "col4"=? WHERE "col1"=? 
Error in sqlUpdate(DBConn, t, tablename = "table", verbose = T) : 
    42000 -131 [Sybase][ODBC Driver][Sybase IQ]Syntax error near 'table' on line 1[RODBC] ERROR: Could not SQLPrepare 'UPDATE "table" SET "col2"=?, "col3"=?, "col4"=? WHERE "col1"=?' 
+2

Sie haben vier Spalten und fünf Platzhalter für eine Sache. –

+0

@GordonLinoff: Schöne Beobachtung. Aber Dim (t) ergibt nur 4. Kann es wegen row inde oder etwas damit verbunden sein? – user1465557

+0

FWIW Ich konnte diesen Befehl nie erhalten, um vorhandene Tabellen korrekt anzufügen; es scheint wie ein Fehler für mich. – nrussell

Antwort

6

Es besteht die Möglichkeit von Datentypen und Spaltennamen ein Problem. So ist es am besten, die Datentypen und Spaltennamen der Tabelle zu erhalten und sie dem Datenrahmen zuzuordnen.

ColumnsOfTable  <- sqlColumns(conn, tablename) 
varTypes    <- as.character(ColumnsOfTable$TYPE_NAME) 
names(varTypes)  <- as.character(ColumnsOfTable$COLUMN_NAME) 
colnames(dataObject) <- as.character(ColumnsOfTable$COLUMN_NAME) 

sqlSave(conn, dataObject, tableNames, fast=TRUE,append=TRUE, rownames=FALSE, varTypes=varTypes) 
+1

Dies sollte als die Lösung markiert werden –