2012-05-11 18 views
17

ich einen Datenfluss-Prozess haben, wo ich eine OLEDB-Quelle und eine OLEDB-Destination wie unten haben:aktualisieren Zeilen in SSIS OLEDB Destination

Data Flow Task

Quelle führt Daten aus zwei Zwischenspeichertabellen und gibt eine Ergebnismenge (sagen, 50K Zeilen). Diese 50K-Zeilen sind auch in der Zieltabelle vorhanden, sind jedoch alte Daten.

SELECT * FROM staging1 
UNION 
SELECT * FROM staging2 

Im Allgemeinen wird in der OLE DB-Ziel legen wir das zurückgebrachte Datenmenge von der Quelle zum Zieltabelle, aber in meinem Fall habe ich die alten 50K Reihen mit diesen neuen 50K Zeilen zu aktualisieren.

Art einer Massenaktualisierung.

Kann jemand bitte lassen Sie mich wissen, wie ich das tun kann? Ich schätze Ihre Hilfe.

Antwort

1

Nun, eine Lösung für mein Problem gefunden; Aktualisieren aller Zeilen mit einer SQL-Abfrage und einer SQL-Aufgabe in SSIS Like Below. Kann anderen helfen, wenn sie in Zukunft dieselbe Herausforderung haben.

update Original 
set Original.Vaal= t.vaal 
from Original join (select * from staging1 union select * from staging2) t 
on Original.id=t.id 
11

Verwenden Sie Lookupstage, um zu entscheiden, ob Sie eine Datei einfügen oder aktualisieren möchten. Überprüfen Sie diesen Link für weitere Informationen - http://beingoyen.blogspot.com/2010/03/ssis-how-to-update-instead-of-insert.html

Schritte Update tun:

  1. Drag OLEDB Befehl [statt oledb Ziel]
  2. Zum Eigenschaftenfenster
  3. unter Benutzerdefinierte Eigenschaften wählen SQLCommand und Aktualisierungsbefehl einfügen zB:

    UPDATE Tabelle1 SET col1 =?, col2 =? wo id =?

  4. Karte Spalten in genau dieser Reihenfolge von der Quelle zum Ausgang wie in Update-Befehl

+0

rs, lesen Sie meine Frage noch einmal; Ich weiß bereits, dass es Update sein muss und keine Notwendigkeit zu entscheiden. Ich möchte nur wissen, wie ich eine Bulk-Rokords aktualisieren soll. – Rahul

+0

hast du diesen Artikel gelesen? Es wird zeigen, wie ein Skript zum Aktualisieren von Zeilen zu generieren und auch ein Konzept darüber, wie Sie in SSIS –

+0

Rahul aktualisieren können, ist richtig. Der verknüpfte Artikel führt Singleton-Updates für alle 50k-Zeilen durch. Das wird langsam und schmerzhaft sein. Ihr Wunsch ist es, eine einzige Update-Anweisung zu veröffentlichen, die die Daten auf einen Schlag zusammenführt. – billinkc

25

Sie können keine Bulk-Update in SSIS innerhalb einer Datenfluß Aufgabe mit den OOB-Komponenten tun.

Das allgemeine Muster besteht darin, Ihre Einfügungen, Aktualisierungen und Löschungen zu identifizieren und die Aktualisierungen und Löschungen in eine Staging-Tabelle (s) zu versetzen. Verwenden Sie nach der Datenflusstask eine setsbasierte Aktualisierung oder Löschung in einer Task zum Ausführen von SQL. Schau dir Andy Leonards Stairway to Integration Services series an. Scrollen Sie etwa 3/4 den Artikel hinunter zu "Set-Based Updates", um das Muster zu sehen.

Bühnen Daten

http://www.sqlservercentral.com/Images/11369.png

Set basierte Updates

enter image description here

Sie werden viel bessere Leistung mit einem Muster wie diese erhalten im Vergleich zu den OLE DB Command Transformation für etwas verwenden, aber trivial Mengen Daten.

Wenn Sie in Drittanbieter-Tools sind, glaube ich CozyRoc und ich weiß PragmaticWorks haben eine Zusammenführungszielkomponente.

+1

Ja, das ist die Antwort/Bestätigung, nach der ich gesucht habe; ein einfaches NEIN :). Pech gehabt, kann nicht für irgendwelche Drittanbieter-Tools gehen. – Rahul

+5

Ich muss mich registrieren um einen Artikel zu lesen ?! – statikuz

+2

@statikuz Ich stimme zu, aber mit https://www.guerrillamail.com/ es dauert nur ein paar Sekunden – Turch