Sie nicht eine einfache SQL-Update-Anweisung mit der SQL-Abfrage-Funktion verwenden kann, es muss nur ein Resultset zurückgeben zum Beispiel wird die folgende Anweisung nicht:.
sql="update mytable set column=value where column=value"
cn <-odbcDriverConnect(connection="yourconnectionstring")
resultset <- sqlQuery(cn,sql)
Aber wenn y Wenn Sie eine Ausgabeanweisung hinzufügen, funktioniert die SQL-Abfragefunktion problemlos. Beispielsweise.
Ich habe gerade eine Funktion hinzugefügt, um es einfach zu machen, Ihre rohe SQL und schnell in eine Update-Anweisung zu verwandeln.
setUpdateSql <-function(updatesql, wheresql, output="inserted.*"){
sql=paste(updatesql," output ",output, wheresql)
sql=gsub("\n"," ",sql) #remove new lines if they appear in sql
return(sql)
}
Also jetzt muss ich nur die SQL-Anweisung aufteilen und es wird ausgeführt. Ich könnte auch einen "insert.columnname" hinzufügen, wenn ich das Ganze nicht zurückgeben wollte.
sql=setUpdateSql("update mytable set column=value","where column=value","inserted.column")#last parameter is optional
cn <-odbcDriverConnect(connection="yourconnectionstring")
resultset <- sqlQuery(cn,sql)
Der andere Vorteil dieser Methode ist, dass Sie herausfinden können, was in der Ergebnismenge verändert hat.
Ich würde empfehlen, die 'odbc' Paket (basierend auf der DBI-Spezifikation), die sogar Masseneinfügungen und Updates unterstützt (wo' RODBC' ist sehr langsam) siehe https://stackoverflow.com/a/43642590/4468078 –