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.
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. –
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
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. –