Bulkcopy fügt mit DBCC CheckIdent ein

batch-processing dbcc sqlbulkcopy sql-server sql-server-2008

Frage

Unser Team muss eine grausame Datenmenge in unsere SQL Server 2008-Datenbank einfügen. Wir suchen nach einer guten Lösung. Jetzt haben wir uns eins ausgedacht, aber ich habe Zweifel, einfach weil es sich nicht richtig anfühlt. Also frage ich hier, ob das eine gute Lösung ist. Eine weitere Herausforderung besteht darin, dass es sich um eine Peer-to-Peer-replizierte Datenbank auf 4 Servern handelt! :)

Stellen Sie sich vor, wir haben 1 Million Zeilen einzufügen

  1. Starten Sie die Transaktion
  2. Erhöhen Sie den aktuellen Ident-Wert in einer Tabelle mit 1 Million
  3. Halten Sie ein DataSet / DataTable bereit mit 1 Million Zeilen und den richtigen IDs
  4. BulkCopy die Daten in die Datenbank
  5. Transaktion ausführen

Ist das eine gute Lösung, könnten wir in Nebenläufigkeitsprobleme geraten, zu große Transaktionen haben usw.?

Beliebte Antwort

Sie werden nur Probleme bekommen (soweit ich sehen kann, also könnte es Dinge geben, die ich übersehen habe!), wenn die Datenbank online ist und Benutzer Zeilen in diese Tabelle einfügen können. Wenn Sie den Identitätswert für neue Zeilen auf der Metaebene erhöhen, bedeutet dies, dass die nächste Zeile, die vom System eingefügt wird, diese Nummer verwendet. Wenn Sie also mit 1 Million beginnen, bedeutet dies, dass Sie diese Zahlen im Voraus reserviert haben.

Identitätsspalten sind "nett", haben aber den Nebeneffekt, dass sie nicht übertragbar sind. Wenn Sie also die Daten in eine andere DB migrieren müssen, müssen Sie wahrscheinlich die eingefügten Daten anpassen, damit sie der Datenbank entsprechen, in die Sie sie eingefügt haben (da die Datenfelder mit den bereits in der Tabelle vorhandenen Zeilen kollidieren können) ).

Wenn dies eine einmalige Angelegenheit ist, könnte es funktionieren. Wenn Sie dies regelmäßig tun möchten, würde ich in ein Migrationssystem auf höherer Ebene schauen, wo Sie die Daten zu neuen Identitätswerten migrieren oder GUIDs mit NEWSEQUENTIALID () verwenden, so dass Sie geprüfte Indizes und auch eindeutige, übertragbare IDs erhalten .



Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum
Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum