Insert Or Update für Microsoft SQL Server
-
Hallo,
ich habe gesehen, das man bei PHP MySql mit diesem String entweder etwas neu in die Datenbank eintragen kann, oder wenn die ID bereits vorhanden ist Update ausgeführt wird.
siehe hier
INSERT INTO table (a,b,c) VALUES (1,2,3) ON DUPLICATE KEY UPDATE ID=3;
Gibt es so eine Möglichkeit auch für den Microsoft SQL Server mit C#?
-
-
Also ich kenne zwei Wege.
1. Mach erst ein Update, prüf die Rows Affected. Ist der Wert 0, mach ein Insert.
using (SqlCommand update = new SqlCommand("UPDATE ... SET ... WHERE ...", connection)) { if (update.ExecuteNonQuery() == 0) { using (SqlCommand insert = new SqlCommand("INSERT INTO ... VALUES ...", connection)) { insert.ExecuteNonQuery(); } } }
2. MERGE command.
http://technet.microsoft.com/en-us/library/bb510625.aspx
Ist kompliziert, aber für Bulk-Updates sehr effizient.
-
ThX.
Is leider nicht das was ich dachte, aber scheint irgendwie nicht anders zu gehen. habe es nun so wie @loks gelöst.
Für mich wäre entscheidend gewesen, das man die Werte im gleichen Format übergibt. so in etwa
sqlIns = string.Format("INSERT INTO {0} ({1}) VALUES ({2})", table, param, content);
und das gleiche eben mit Update
sqlIns = string.Format("UPDATE {0} SET ({1}) VALUES ({2}) WHERE ID = {3}", table, param, content, id);
Da ich sehr viele Werte eintragen muss.
Danke trotzdem.
-
Nimm MERGE.
Und wenn du so viele Spalten hast, vielleicht würde es sich auszahlen ne eigene kleine Query-Builder Klasse zu schreiben.
-
Fantoma555 schrieb:
ThX.
Für mich wäre entscheidend gewesen, das man die Werte im gleichen Format übergibt. so in etwaehm, man packt die Parameter ja auch nicht in den SQL String rein...
using (SqlCommand insert = new SqlCommand("INSERT INTO (a,b,c,d,e,f) VALUES (@param1,@param2,@param3,@param4,@param5,@param6)", connection)) { insert.Parameters.AddWithValue("param1", ...); insert.Parameters.AddWithValue("param2", ...); insert.Parameters.AddWithValue("param3", ...); insert.Parameters.AddWithValue("param4", ...); insert.Parameters.AddWithValue("param5", ...); insert.Parameters.AddWithValue("param6", ...); }