Frage Verwenden von SQLBulkCopy zum Einfügen / Aktualisieren der Datenbank


Ich habe Datensätze mit SqlBulkCopy in Sql Tabelle.Es funktioniert gut.Nächste Mal, wenn die Datentabelle mit den gleichen Datensätzen mit wenigen geänderten Werten erhalten SqlBulkCopy fügt eine weitere Reihe von Datensätzen, ohne die vorherigen Details zu aktualisieren kann ich die Sql-Tabelle mit SqlBulkCopy aktualisieren ?? Bitte helfen Sie.

Vielen Dank, Vix


9
2017-11-09 11:36


Ursprung


Antworten:


SqlBulkCopy wird nur zum Einfügen von Datensätzen verwendet und nicht wie beschrieben aktualisiert Hier. Sie müssen eine andere Technik verwenden, um Bulk-Updates durchzuführen.

z.B. Sie könnten SqlBulkCopy in eine Staging-Tabelle einfügen und dann SQL ausführen, um von dort zur Haupttabelle zu wechseln.


15
2017-11-09 11:52



Kürzen Sie die Tabelle und führen Sie Bulkcopy durch.


3
2017-11-09 13:28



Vermeiden Sie das Abschneiden der Tabelle und Erstellen Sie eine neue temporäre Tabelle, die mehr Speicherplatz und Arbeitsspeicher verbrauchen.

Ich habe einen Trigger mit INSTEAD OF INSERT erstellt und verwende eine MERGE-Anweisung.

Aber vergessen Sie nicht, den Parameter SqlBulkCopyOptions.FireTriggers in SqlBulkCopy hinzuzufügen.

Das sind meine zwei Cent.


2
2017-11-06 01:00



Wie von AdaTheDev erwähnt, kann SqlBulkCopy nur einfügen, aber es gibt eine alternative Bibliothek, die Upsert-Operationen ausführen kann.

Haftungsausschluss: Ich bin der Besitzer des Projekts Massenvorgänge

Die Bulk-Operations-Bibliothek hat eine Methode "BulkMerge"die Zeilen einfügen oder aktualisieren basierend auf dem angegebenen Schlüssel.

var bulk = new BulkOperation(connection);

bulk.ColumnMappings.Add("ID", true);
bulk.ColumnMappings.Add("Column1");
bulk.ColumnMappings.Add("Column2");
bulk.ColumnMappings.Add("Column3");

bulk.BulkMerge(dt);

-1
2018-03-11 18:29