Ich bin hier ein bisschen fest hier versuchen viele Daten (eine Million Datensätze insgesamt) aus drei verwandten Tabellen zu anderen drei verwandten Tabellen in der gleichen Datenbank zu kopieren.Verwenden von SqlBulkCopy in einer Transaktion für mehrere, verknüpfte Tabellen
Mein Tischdesign ist wie folgt:
Was ich brauche, ist in der Lage sein, Daten aus dem Entwurf Tabellen kopieren über die nicht-Entwurf Tabellen in einer Transaktion, die ich in der Lage bin zu Rollback, wenn etwas schief geht. Dies wird benötigt, da wir keine Billing
und BillingPriceLine
Datensätze in der Datenbank haben wollen, wenn die Bulk-Einfügung von BillingPriceLineSpecificationDraft
Kopie fehlgeschlagen ist.
Da ich jedoch SqlBulkCopy
zum Kopieren der Datensätze verwende, kann ich die neuen IDs nicht erfassen, um die richtigen Beziehungen zwischen den drei neuen Tabellen herzustellen. Wenn ich einen Lesevorgang, d. H. Die Billing
Tabelle in der Transaktion, um die richtige Billing
ID zu erhalten, bekomme ich eine Auszeit, die erwartet wird, da die Tabellen innerhalb der Transaktion gesperrt sind.
Ich habe versucht, die IsolationLevel
Enum auf die Transaktion (in der Tat, ich ging verrückt und versuchte sie alle ;-)), aber sie taten nichts, was es scheint.
Gibt es einen guten Weg, dies zu tun, dass ich vermisse?
Vielen Dank im Voraus.
Hallo TomTom, vielen Dank für deine Antwort, es macht Sinn :-) Ich kann erfolgreich Bulk einfügen in die drei temporären Tabellen, aber ich bin ein bisschen in einem Verlust, wenn es um den Einsatz kommt Anweisungen, da die "BillingPriceLine" mit dem Datensatz "Abrechnung" und vica verca in Zusammenhang stehen sollte. Hast du irgendwo ein Beispiel, das zeigt, wie man diese Einsätze macht? :-) Danke noch einmal! – bomortensen
Nein, nicht als Beispiel. Ich mache Tonnen von Beilagen, aber ich habe in den meisten Fällen natürliche Schlüssel. Denken Sie daran: Sie können der temporären Tabelle ein weiteres Feld mit gefälschten IDs hinzufügen, die Sie auf der Clientseite generieren. Benutze sie dann für die Joins. Das ist nicht so kompliziert - aber es ist "echt" sql, nicht die Quiz-Sachen, die die meisten Leute heutzutage machen. – TomTom
Hallo TomTom, ich verstehe, was du sagst :-) Ich habe es geschafft, indem ich die 'OUTPUT'-MSSQL-Klausel benutzte, um sowohl die ID des Entwurfs als auch die eingefügte ID zu speichern und die Beziehungen auf diese Weise zu erstellen. Funktioniert perfekt. Danke für Ihre Hilfe! – bomortensen