Ausgabe
Ich habe einen Datenrahmen (df) mit drei Spalten (a,b,c)
Ich füge diese Werte in die SQL-Datenbank ein
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)
Quelle:
Wie fügt man einen Datenrahmen in eine SQL Server-Tabelle ein?
Meine Frage ist, was ist das Update-Äquivalent dieses Beispiels? Wie kann ich verwenden
cmd <- paste("update MyTable values ", values)
result <- sqlQuery(con, cmd, as.is=TRUE)
Ich habe sqlSave und sqlUpdate ausprobiert, aber es blieb zu früh mit Fehlermeldungen wie fehlenden Spalten, Index usw. hängen, also greife ich auf dieses obige Beispiel zurück und versuche zu lernen, wie man Update-Anweisungen basierend auf diesem Spielzeug-Dataset verwendet. Jede Hilfe wird sehr geschätzt, Leute.
Lösung
Also, erstens haben Sie die falsche Syntax für UPDATE
. Im Algemeinen,
UPDATE table_name
SET column1 = value1, column2 = value2...., columnN = valueN
WHERE [condition];
Sie können die Werte also nicht wie bisher als verketteten Vektor aufbauen. Wenn Sie kein bestimmtes Element mit auswählen WHERE
, aktualisieren Sie den Wert für value1
alle Werte in column1
.
BEARBEITEN: Wenn Sie die Bedingung nicht erfüllen können, dann aktualisieren Sie nicht wirklich, Sie fügen ein, was die Formen hat:
Es ist möglich, die INSERT INTO-Anweisung in zwei Formen zu schreiben.
Das erste Formular gibt nicht die Spaltennamen an, in die die Daten eingefügt werden, sondern nur ihre Werte:
INSERT INTO table_name
VALUES (value1,value2,value3,...);
Die zweite Form gibt sowohl die Spaltennamen als auch die einzufügenden Werte an:
INSERT INTO table_name (column1,column2,column3,...)
VALUES (value1,value2,value3,...);
Wenn Sie etwas Komplizierteres machen wollen, müssen Sie die Abfrage mit SQL aufbauen, wahrscheinlich zuerst in etwas anderem als R, um zumindest zu lernen. Eine Möglichkeit zum Experimentieren könnte SQL Fiddle sein , wenn Sie sich mit SQL noch nicht auskennen.
Beantwortet von – Shawn Mehan
Antwort geprüft von – Pedro (FixError Volunteer)