2016-04-05 4 views
0

Von dem, was ich verstehe, ist die beste Möglichkeit, Daten mit C# und SQL Server in großen Mengen einzufügen, einen Tabellentyp zu verwenden und eine Datentabelle zu übergeben. Unser aktueller Prozessablauf besteht in der Verarbeitung/Einfügung von Daten zu einem Zeitpunkt (auch wenn es Tausende von Datensätzen gibt), sodass wir gültige Datensätze erfolgreich verarbeiten und Fehler melden können. Das ist natürlich ein großes Leistungsproblem.Bulk-Einfügeoperationen verarbeiten Datensätze ohne Fehler

Gibt es eine Möglichkeit, Bulk-Insert-Vorgänge durchzuführen, die das Einfügen gültiger Datensätze und das Fehlschlagen ungültiger Datensätze ermöglichen? Wenn ja, wie finden Sie heraus, welche Datensätze bestanden und welche fehlgeschlagen sind oder einen Fehler verursacht haben?

+1

Diese [Artikel] (http://www.codeproject.com/Articles/387465/Retrieving-failed-records-after-an-SqlBulkCopy-exc) diskutieren dies im Detail. –

+0

Dies ist ein wirklich interessanter Artikel, der mir einige zusätzliche Ideen gibt, wohin ich damit gehen soll, aber es wurde 2012 geschrieben. Ich frage mich, ob sich seitdem etwas mit neuen Versionen von SQL Server oder dem .Net Framework geändert hat . Ist Bulk-Kopie immer noch der beste Weg, um einen Tabellentyp zu verwenden? –

Antwort

0

Ich denke nur SSIS kann tun, was Sie beschreiben. Was ich in der Vergangenheit getan habe, ist die Verwendung von SQLXML zum Massenladen von Daten an SQL Server (https://msdn.microsoft.com/en-us/library/ms171993.aspx).

Im Grunde, was ich getan habe, ist dies:

  1. ein XML-Schema erstellen, die auf die Tabellenstruktur entspricht und hinzugefügt Mapping-Attribute (siehe hier https://msdn.microsoft.com/en-us/library/ms171721.aspx)
  2. erstellen die XML-Datei aus C# unter Verwendung des XML-Schemas für Serialisierung meiner Daten
  3. Da XML-Massenladen im ersten Fehler wie BulkInsert fehlschlägt, musste ich das XML-Dokument mit XMLReader analysieren (seriell zur Unterstützung großer XML-Dateien) und validiere es gegen das Schema. Auf diese Weise wusste ich, welche Elemente nicht mit dem Schema übereinstimmten, und ich konnte sie entfernen und in einer anderen XML-Datei speichern.
  4. bulk die feste XML-Datei mit dem SQL-Server-Tabelle

So ist die Haupt I/O umfasst hier laden: mit einem Leser-Stream zu lesenden streamt die XML und 2 Schriftsteller die gültigen und ungültigen XML-Dateien zu schreiben und schließlich das Laden der gültigen XML-Datei.

Die Leistung ist groß btw (Ich kann 1GB Datei in weniger als 5 Minuten auf meinem Laptop load laden, aber dies kann je nach Festplattengeschwindigkeit und CPU variieren). Die Speicherauslastung ist sehr gering.

Verwandte Themen