In einem SSIS-Paket, wie fügen Sie master-detail-records?
Habe ich einen Datenflusstask Daten, die extrahiert Daten aus einer Datenbank und fügt in einer SQL Server-Datenbank. Nach jedem Datensatz eingefügt wird, in der master-Reihe muss ich auch zum einfügen von Zeilen in eine detail-Tabelle. Die Daten der detail-Tabelle ist ziemlich einfach und kann berechnet werden.
- Wie Kriege ich den Wert der identity-Spalte nach dem einfügen?
- Wie kann ich produzieren die Zeilen, die eingefügt werden muss, in der zweiten Tabelle? Kann ich dies in ein script?
Muss ich mit einer Foreach-Schleife auf der control-flow-Ebene, die transfers der übergeordneten Zeile in einem data flow task, dann haben die anderen Foreach-Schleife, welche Einsätze die detail-Datensätze?
Kann ich einfach durchzuführen, alle detail-Zeile einfügt, die in einem Skript? Das wäre wahrscheinlich einfacher, als in den Foreach-Schleifen.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hier ist ein Ansatz..
Erstellen Sie eine variable vom Typ object.
Erstellen einer "Task SQL Ausführen" das packt Ihr-source-Daten und lädt Sie in die variable (ADO.NET).
Erstellen Sie eine "ForEach-Schleifen-Container.
Ziehen Sie die Erfolg-Anschluss (grün) von der "Task SQL Ausführen", um die "ForEach-Loop-Container". Ändern Enumerator auf die loop-container "foreach-ADO-Enumerator" und wählen Sie die variable aus der "ADO-Objekt-source-variable".
Innerhalb der Schleife, Sie sollten alble zum hinzufügen eines Tasks "SQL Ausführen" mit dem man arbeiten kann..
Sollten Sie in der Lage sein zu verwenden, die SCOPE_IDENTITY() auf, um jede ID nach dem einfügen in die master-Tabelle, und verwenden Sie, dass zum einfügen in die detail-Tabelle.
Ich habe dieses Problem auf einer etwas massiven (Import tief geschachtelten XML). Ich war in der Lage zu nutzen, ein feature der XML-Quelle, das schafft einen künstlichen Schlüssel in der master "Tabelle", dass wiederholt sich dann in die "child" - Tabelle als "foreign key".
Die Idee ist, jedem zu erlauben "Tabelle" auf einen separaten staging-Tabelle in der Datenbank. Nachdem alle Zeilen verarbeitet wurden, dann können diese "foreign-keys" zu tun, eine endgültige Verarbeitung, die erfordert, dass sowohl die master-und detail-Zeilen erstellt werden, zur gleichen Zeit, auch in eine Transaktion, wenn nötig.
Dies ermöglicht die performance eines data flow task, in Kombination mit der master-detail-die Natur mit Ihren Daten.
Einer Technik, die ich Häufig verwende, wenn ich die Migration von Daten, die über ein ID-Feld in der Quelle eine Spalte namens "OldID" in der Ziel-master-Tabelle. Füllen Sie es mit einem SSIS control-setzen Sie die original-id-Feld in OldID. Dann ist eine anschließende SSIS control-führen Sie eine Suche gegen den bereits besiedelten master-Datensätze, in denen die OldID die Quelle entspricht der ID und Holen Sie sich die neu erstellte ID, die Art und Weise.