Announcement

Collapse
No announcement yet.

Datensätze als importiert markieren

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Datensätze als importiert markieren

    Hallo,

    ich benötige mal wieder einen kleinen Denkanstoß!
    Von einer Tabelle möchte ich in eine andere Datensätze importieren. Dabei will ich erst die ersten 10.000 Datensätze importieren, dann die geladenen Datensätze als importiert markieren und dann die nächsten 10.000, die noch nicht markiert sind usw...
    Wie könnte ich denn sowas realisieren?
    Momentan habe ich eine Loop-Schleife und im darin enthaltenen Dataflow Task rufe ich einen View auf, bei dem steht "SELECT TOP 10000 ... WHERE is_imported = 0". Danach werden alle 10.000 Datensätze in die andere Tabelle geladen. Wie sage ich ihm aber jetzt, dass er bei den 10.000 Datensätze im Speicher das Feld "is_imported" auf 1 setzen soll und das dann in die Ursprungstabelle updaten soll. Wenn ich dafür einen DB-Command einsetzen und dort "UPDATE tabelle SET is_imported = 1 WHERE ID = ?", dann ruft er mir 10.000 Updates pro Schleife auf und das dauert ewig. Gibt es eine bessere Alternative?

    Mir ist bis jetzt noch keine Idee gekommen.
    Gruß Timo

  • #2
    Wenn sich zwischenzeitlich nichts ändert, kann man ja auch das Update mit einem TOP X ausführen (eine der Neuerungen in SQL 2005). Also zuerst ein
    INSERT INTO andereTabelle SELECT TOP 10000 from quellTabelle WHERE is_imported = 0 order by id
    und dann ein
    UPDATE TOP 10000 quellTabelle set is_imported = 1 WHERE is_imported = 0 order by id

    Wenn du nicht sicher bist und is_imported nicht gerade als bit definiert wurde, könntest du auch zuerst die Daten blockweise markieren, dann importieren und anschliessend den imported-Flag richtigstellen. Also etwa so:
    UPDATE TOP 10000 quellTabelle set is_imported = 2 WHERE is_imported = 0
    dann der Import ...
    INSERT INTO andereTabelle SELECT * from quellTabelle WHERE is_imported = 2
    und abschliessend
    UPDATE quellTabelle set is_imported = 1 WHERE is_imported = 2


    bye,
    Helmut

    Comment

    Working...
    X