none
SSIS - Nur neue Zeilen übernehmen RRS feed

  • Frage

  • Hallo zusammen,

    gern möchte ich den Inhalt einer SharePoint Liste per SSIS in eine SQL Datenbank überführen. So weit ist das auch kein Problem. Ich greife die SharePoint Liste über eine OData Source ab, sortiere die Liste und füge diese in eine ADO Net Destination ein (wahrscheinlich würden hier auch andere Verbindungstypen funktionieren).
    Die SharePoint Liste bekommt allerdings immer wieder neue Zeilen hinzugefügt. Jetzt möchte ich gern nur noch die neu hinzugefügten Zeilen in die Datenbank überführen (damit nicht immer wieder ALLE Listeneinträge dazu kommen). Welcher Weg wäre hierfür der Beste?

    Gibt es eine Möglichkeit, diesen Job immer dann automatisch anzuschieben, wenn in der SharePoint Liste Einträge hinzugekommen sind oder macht man da am besten einen Zeitgesteuerten Datenbankjob?

    Danke für die Hilfe!

    Grüße
    Olaf

    Freitag, 12. Juli 2019 09:25

Antworten

  • Hm, wieso nicht?
    https://social.msdn.microsoft.com/Forums/sqlserver/en-US/aad73d37-cff5-4e04-b892-5484177ba7cd/ssis-dataflow-copy-only-changed-and-new-records?forum=sqlintegrationservices

    You can use it as below

    1. Extract changed data from source using data flow task with OLEDB source and get data onto a staging table using oledb destination in your destination server

    2. Use a execute sql task following data flow task and inside it call MERGE t-sql statement to get changed data onto destination using staging table as the source with comparison based on the key columns. This would be the fastest as its set based.

    Schritt 1 kann man sich sparen, wenn die Quelldaten per Linked Server als Tabelle verknüpft werden können.
    • Bearbeitet bfuerchau Montag, 29. Juli 2019 13:40
    • Als Antwort markiert Olaf113 Montag, 5. August 2019 08:19
    Montag, 29. Juli 2019 13:39

Alle Antworten

  • Hi Olaf,
    schau Dir mal Microsoft FLOW an. Den Workflow kannst Du an das Added-Ereignis hängen und dann bekommst Du immer den neu angehängten Listeneintrag.

    --
    Best Regards / Viele Grüße
    Peter Fleischer (former MVP for Developer Technologies)
    Homepage, Tipps, Tricks

    Freitag, 12. Juli 2019 10:23
  • Vielen Dank für die Antwort!

    Gibt es keine Lösung innerhalb von SSIS?

    Freitag, 12. Juli 2019 11:27
  • Definiere in der Zieltabelle einen passenden Unique-Key zu den Quelldaten.
    Dann wird ein Insert wegen duplicate Key abgelehnt.

    Alternativ dazu gibt es den SQL-Befehl "Merge":
    https://www.mssqltips.com/sqlservertip/1704/using-merge-in-sql-server-to-insert-update-and-delete-at-the-same-time/

    So dass man geänderte Einträge updated und neue inserted.

    Freitag, 12. Juli 2019 14:40
  • Danke für die Antwort!
    Leider ist das aber nicht das, was ich gesucht habe.
    Ich meinte keinen SQL-Befehl sondern muss das in einem Dataflow in SSIS umsetzen.

    Montag, 29. Juli 2019 12:59
  • Hm, wieso nicht?
    https://social.msdn.microsoft.com/Forums/sqlserver/en-US/aad73d37-cff5-4e04-b892-5484177ba7cd/ssis-dataflow-copy-only-changed-and-new-records?forum=sqlintegrationservices

    You can use it as below

    1. Extract changed data from source using data flow task with OLEDB source and get data onto a staging table using oledb destination in your destination server

    2. Use a execute sql task following data flow task and inside it call MERGE t-sql statement to get changed data onto destination using staging table as the source with comparison based on the key columns. This would be the fastest as its set based.

    Schritt 1 kann man sich sparen, wenn die Quelldaten per Linked Server als Tabelle verknüpft werden können.
    • Bearbeitet bfuerchau Montag, 29. Juli 2019 13:40
    • Als Antwort markiert Olaf113 Montag, 5. August 2019 08:19
    Montag, 29. Juli 2019 13:39
  • In SSIS gibt es analog dazu die Merge Transformation.

    Olaf Helper

    [ Blog] [ Xing] [ MVP]

    Montag, 29. Juli 2019 14:18
  • Jetzt funktioniert es. Es war der richtige Ansatz.
    Ich hab mir jetzt eine TEMP-Tabelle angelegt, in welche ich immer alle Datensätze aus dem SharePoint lade. Danach vergleiche ich per Execute SQL Task die Temp-Tabelle mit der Ziel-Tabelle und schreibe die neuen Datensätze dazu.

    Danke für die Hilfe!

    Montag, 5. August 2019 08:19