4 Stimmen

bcp in eine Transaktion mit einer anderen tsql-Anweisung einfügen

Nachdem ein bcp-Ausgabebefehl von tsql seine Arbeit getan hat (Export einer Datei), möchten Sie in der Regel die Quelle anschließend bereinigen. Dazu gehört in der Regel das Abschneiden der Quelltabelle oder das Setzen einer Markierung, dass die Datensätze tatsächlich verarbeitet wurden.

Wenn Sie die Daten nicht bereinigen, wird der nächste Export natürlich die alten und bereits exportierten Zeilen enthalten.

Meine Experimente zeigen, dass man einen bcp nicht innerhalb einer Transaktion platzieren kann. Ich gehe davon aus, dass es sich um ein Tool handelt, das außerhalb des Prozesses steht und sich nicht an der initiierenden Transaktion beteiligt (bitte korrigieren Sie mich, wenn ich falsch liege).

Die Frage ist, ob es möglich ist, diese 2 Aktionen als eine Arbeitseinheit auf eine andere Art und Weise? Entweder scheitern sie gemeinsam oder sie sind gemeinsam erfolgreich.

Ich hatte gehofft, dass es eine "Post-Action" gibt, die man an bcp übergeben kann, so dass bcp selbst ein transaktionsähnliches Verhalten garantieren kann.

Danke für die Ideen, Tom

0voto

sisdog Punkte 2590

Wie wäre es damit: Markieren Sie alle Zeilen, indem Sie ihre PK-IDs in eine Verarbeitungstabelle schreiben. Führen Sie dann das BCP mit xp_cmdshell aus und prüfen Sie auf Fehler ( siehe diesen Artikel für ein Beispiel ). Wenn alles gut gelaufen ist, verwenden Sie die Verarbeitungstabelle, um die zu löschenden Originalzeilen zu finden. Andernfalls löschen Sie die Verarbeitungstabelle und Sie können es erneut versuchen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X