2016-04-27 15 views
1

Ich stehe vor einem Problem, ich hoffe, es von hier gelöst zu bekommen. Ich habe 3 verschiedene Tabellen in einem DataSet und möchte es in die Datenbanktabelle einfügen.Einfügen/Aktualisieren der gesamten DataTable in die Datenbanktabelle C#

Ich weiß, ich kann dies mit SqlBulkCopy tun, aber es gibt einen Haken, und das ist ich möchte überprüfen, ob die Daten bereits in der Datenbank vorhanden ist, dann möchte ich es anstelle von einfügen aktualisieren.

Und wenn die Daten nicht in der Datenbanktabelle vorhanden sind, möchte ich es dann einfügen. Jede Hilfe dazu wäre willkommen.

Ich weiß, ich kann es durch jeden Datensatz iterieren und dann eine Prozedur feuern, die auf seine Existenz prüfen wird, wenn es das Update existiert oder sonst einfügen. Aber die Datenmenge ist riesig und das Durchlaufen jedes Datensatzes wäre ein Zeitnahmeprozess, ich möchte diesen Ansatz nicht verwenden.

Grüße

+0

Können Sie nicht nur ** (1) ** bulk fügen Sie dies in Staging-Tabellen in SQL Server in einem einzigen Durchlauf, und dann ** (2) ** auf der Datenbank Seite aktualisieren Sie Ihre tatsächliche Datentabelle aus den Staging-Tabellen mit T-SQL-Code auf dem Server, die diese Logik "wenn nicht existiert dann einfügen"? Das wäre viel schneller als das lokale Iterieren eines großen Datasets und das Einfügen nur einiger Zeilen. –

+0

Ich habe keine Berechtigung, neue Tabellen in der Datenbank zu erstellen. –

+0

Das Ausführen von Lese- und Ausführungsbefehlen in .NET kann aus vielen Gründen ineffizient sein. Sie können SQL-Anweisungen wie check und Insert/Update je nach Vorhandensein des Datensatzes erzeugen. Aber das führt zu Hude-Text-Datei, die wahrscheinlich schwer zu manipulieren sein wird. Sie können die IDs mit einfachen C# -Anwendung erhalten Sie können entsprechende Sql-Befehle/Anweisungen generieren. Eine andere Option könnte sein, alle Datensätze einzufügen und auf Primärschlüsselausnahmen zu warten, um sie später zu aktualisieren. – ali

Antwort

0

Haftungsausschluss: Ich bin der Besitzer des Projekts Bulk Operations

Dieses Projekt BulkInsert erlaubt, BulkUpdate, BulkDelete und BulkMerge (Upsert).

Unter der Haube tut es fast, was @marc_s vorgeschlagen hat (Verwenden Sie SqlBulkCopy in eine temporäre Tabelle und führen Sie eine Merge-Anweisung zum Einfügen oder Aktualisieren abhängig vom Primärschlüssel aus).

+0

Wow Danke Es ist den Versuch wert, denke ich. Lemmes Überprüfen Sie es und upvote es dann, wenn es perfekt funktioniert :) Prost Danke nochmals. BTW auf der Website sagt es ist ein Versuch, also was sind die Begrenzung es besteht? –

+0

Leider haben wir einige kostenlose Produkte, aber diese haben nur eine PRO-Version (also nicht kostenlos). Jeden Monat wird eine neue Testversion für den aktuellen Monat veröffentlicht. –

+0

Was sind die Einschränkungen, die wir mit der Testsoftware haben? –