Ich habe eine DataTable mit ca. 500K + Datensätze, und ich möchte ein Feld in der Datenbank für jeden dieser Datensätze in der DataTable aktualisieren.Viele Zeilen aktualisieren
Im Moment bekomme ich eine Liste aller Datensätze in der ID-Spalte der Datentabelle und eine Update-Anweisung mit einer SQL-in
Anweisung Erstellen auf diesem IDs, etwa so:
string sql = "UPDATE my_table SET my_field = @timestamp WHERE id IN (" + String.Join(", ", myDataTable.AsEnumerable().Select(r => r.Field<Int64>("id")).ToList().ToArray()) + ")";
Dies funktioniert Bei einigen Datensätzen bekomme ich jedoch aufgrund der großen Anzahl von IDs einen Fehler, der besagt, dass die Paketgröße in MySQL für diese Abfrage nicht groß genug ist.
Was kann neben der Erhöhung der Paketgröße getan werden, was ein schlechter Ansatz zu sein scheint?
Wie Sie dann von IN-Klausel Ergebnis erhalten ..? ist möglich, das gleiche Ergebnis mit einer Abfrage zu erhalten? – scaisEdge
Ich würde damit beginnen, Ihre Abfrage nicht auf diese Weise aufzubauen. Da Sie dieses C# getaggt haben, würde ich annehmen, dass Sie Zugriff auf ADO.NET haben, was bedeutet, dass Sie Ihre Abfrage parametrisieren können. –
Ich zweite Tonson T. Kommentar.Möchten Sie alle Datensätze in dieser Tabelle aktualisieren? Ist die Liste der IDs in einer anderen Tabelle zu aktualisieren? Wenn dies der Fall ist, verwenden Sie eine Verknüpfung, um auszuwählen, welche Datensätze aktualisiert werden sollen. –