2016-07-20 8 views
0

Ich muss Daten aus einer Tabelle tableA in tableB schieben. Jetzt habe ich einfach einfügen Skript verwenden, dies zu tun, wie unten erwähnt -kann Fehler Zeile in einer anderen Tabelle in Sql-Server 2012 eingefügt werden

Legen Sie in tableB (col1, col2) Select col1, col2 Von tableA

jetzt COL1 in TableB ist Primärschlüssel. Der Client möchte eine Fehlerzeile in eine andere Fehlertabelle einfügen, falls ein Fehler auftritt. Der Prozess des Einfügens sollte nicht aufhören. Wenn z. B. 2 Zeilen mit demselben pk-Wert für Spalte1 von TabelleA vorhanden sind, sollte die erste Zeile in die Tabelle eingefügt werden, und die zweite Zeile, die PK-Verletzung enthält, sollte in eine andere Tabelle mit derselben Struktur eingefügt werden. Jetzt verstehe ich nicht, wie dies im SQL-Server passieren kann. Ganze Einfügung ist eine atomare Transaktion. Dies ist die Eigenschaft der Transaktion.

Können wir einige wie in Catch-Block verwalten.

+0

Ich gehe davon aus, indem catch-Block Sie in Ihrer gespeicherten Prozedur bedeuten? Ein catch-Block wird einen Fehler in der gesamten atomaren Transaktion abfangen. Also ... Sie können dies nicht in einem catch-Block verwalten, der Inserts mehrerer Zeilen ausführt. Sie müssten diese Art von Sache auf einer granulareren Ebene behandeln. Es kommen Ihnen Loops in den Sinn, aber abhängig von den tatsächlichen Regeln können Sie möglicherweise stattdessen mehrere INSERT-Anweisungen verwenden. –

+0

Ja die obige Insert-Anweisung ist in SP. Looping wird ein sehr langsamer Prozess sein. Es gibt fast 60 Millionen Datensätze, die monatlich pushen müssen. – sam

+0

Richtig .... deshalb habe ich gesagt, dass Sie dies wahrscheinlich mit 2 Einfügeanweisungen anstelle einer Schleife tun könnten. Es ist schwer, hier viele Vorschläge zu machen, denn es gibt nicht viele Informationen darüber, was passiert. Fügen Sie zuerst Zeilen ein, die akzeptabel sind. Zweite Einfügung von Zeilen, die den PK verletzen würden. –

Antwort

0

Sie könnten dies in SSIS ziemlich leicht handhaben. Erfolgreiche Datensätze gehen in Ihre gewünschte Tabelle, nicht erfolgreiche Datensätze könnten in eine Fehlertabelle gelangen. Mein Screenshot unten ist ziemlich einfach; aber ich lade eine Flat-Datei, die eine Staging-Tabelle mit guten Datensätzen füllt, und lädt die fehlerhaften Datensätze in eine Fehlertabelle.

enter image description here

+0

Ich hätte nie gedacht, dass es so einfach wäre – sam

+0

@Jason besser wäre, wenn Sie Antwort ohne SSIS-Lösung hinzufügen. Dies ist eine alternative/Workaround-Lösung, die Sie zumindest erwähnen sollten –

Verwandte Themen