Flag nach Export setzen

ewc1111

Benutzer
Beiträge
20
Hallo, ich habe folgende Aufgabe bekommen und hänge jetzt fest: Es sollen täglich mehrmals Daten exportiert werden in ein flatfile welches dann extern weiterverarbeitet wird. Das funktioniert auch soweit und ich realisiere das ganze über den SSIS (SQL Server 2012). Nur jetzt kommts: Wie kann ich einen Flag oder Kenner setzen in der Datenbanktabelle nach einem Export so das dieser Datensatz nicht ein weiteres Mal exportiert wird. Hat jemand eine Idee ?
 
Werbung:
Ich habe SSIS leider nur mal oberflächlich verwendet, vieleicht unterstützt das die Ausführung von SQL Statements nach dem export? Es müsste natürlich sichergestellt sein, das die Tabelle nicht während oder nach dem Export und vor Ausführung des Statements verändert wurde.
 
Ich habe SSIS leider nur mal oberflächlich verwendet, vieleicht unterstützt das die Ausführung von SQL Statements nach dem export? Es müsste natürlich sichergestellt sein, das die Tabelle nicht während oder nach dem Export und vor Ausführung des Statements verändert wurde.
Jepp genau das ist mein Problem. Das Feld in der Datenbanktabelle anfügen wie akretschmer oben schreibt ist klar. Aber es kommen eben immer neue Datensätze hinzu. Da kann es auch sein während eines Exports das neue geschrieben werden. Ich dachte evtl. auch eine temporäre Tabelle die die Daten abgleicht ? Aber dazu fehlen mir noch entsprechende Kenntnisse wie ich da am besten vorgehen kann.
 
Kann mssql sowas wie folgt?

Code:
tes
test=# select * from foo;
 id | flag
----+------
  1 | f
  2 | f
  3 | f
  4 | f
  5 | f
  6 | f
  7 | f
  8 | f
  9 | f
 10 | f
(10 rows)

Nun z.B. in einem Rutsch alle mit id < 8 abfragen und das Flag setzen:

Code:
test=*# with export as (update foo set flag = true where id < 8 and not flag returning *) select * from export;
 id | flag
----+------
  1 | t
  2 | t
  3 | t
  4 | t
  5 | t
  6 | t
  7 | t
(7 rows)

Das kannst nun exportieren, in der foo steht nun:

[code]
test=*# select * from foo;
 id | flag
----+------
  8 | f
  9 | f
 10 | f
  1 | t
  2 | t
  3 | t
  4 | t
  5 | t
  6 | t
  7 | t
(10 rows)


Damit siehst nun auch, was schon exportiert wurde.
 
Was passiert denn wenn Datensätze während des Exports verändert werden, führt SSIS erst den Export durch und dann die Änderungen?

Du hast viele Möglichkeiten aber in jedem Fall muss SSIS entweder selbst während oder nach dem Export tätig werden oder du musst den Export über ein Script starten das im Anschluss die Markierung setzt. Der Rest ist ausprobieren...
 
Kann mssql sowas wie folgt?

Code:
tes
test=# select * from foo;
id | flag
----+------
  1 | f
  2 | f
  3 | f
  4 | f
  5 | f
  6 | f
  7 | f
  8 | f
  9 | f
10 | f
(10 rows)

Nun z.B. in einem Rutsch alle mit id < 8 abfragen und das Flag setzen:

Code:
test=*# with export as (update foo set flag = true where id < 8 and not flag returning *) select * from export;
id | flag
----+------
  1 | t
  2 | t
  3 | t
  4 | t
  5 | t
  6 | t
  7 | t
(7 rows)

Das kannst nun exportieren, in der foo steht nun:

[code]
test=*# select * from foo;
id | flag
----+------
  8 | f
  9 | f
10 | f
  1 | t
  2 | t
  3 | t
  4 | t
  5 | t
  6 | t
  7 | t
(10 rows)


Damit siehst nun auch, was schon exportiert wurde.

Das müsste ich mal ausprobieren ob MS das so in etwa kann. Danke erstmal für Deine Bemühungen ;-)
 
Was passiert denn wenn Datensätze während des Exports verändert werden, führt SSIS erst den Export durch und dann die Änderungen?

Du hast viele Möglichkeiten aber in jedem Fall muss SSIS entweder selbst während oder nach dem Export tätig werden oder du musst den Export über ein Script starten das im Anschluss die Markierung setzt. Der Rest ist ausprobieren...
SSIS wird das einfach ignorieren und exportieren ;-) Ich vermute stark das ich hier mit einem Tabellenvergleich arbeiten muss um den Flag zu setzen. Danke erstmal, ich versuche mich mal da durchzuhangeln :)
 
Werbung:
Zurück
Oben