ich die folgenden Tabellen:Überspringen-over/ignorieren doppelte Zeilen auf Insert
DataValue
DateStamp ItemId Value
---------- ------ -----
2012-05-22 1 6541
2012-05-22 2 12321
2012-05-21 3 32
tmp_holding_DataValue
DateStamp ItemId Value
---------- ------ -----
2012-05-22 1 6541
2012-05-22 4 87
2012-05-21 5 234
DateStamp
und ItemId
die Primärschlüsselspalten sind.
Ich mache einen Einsatz, der in regelmäßigen Abständen den ganzen Tag läuft (in einer Stored Procedure):
insert into DataValue(DateStamp, ItemId, Value)
select DateStamp, ItemId, Value from tmp_holding_DataValue;
Dies verschiebt Daten vom Haltetisch (tmp_holding_DataValue
) über in die Hauptdatentabelle (DataValue
). Der Haltetisch wird dann abgeschnitten.
Das Problem besteht darin, dass die Warteschlangentabelle, wie im Beispiel, Elemente enthalten kann, die bereits in der Haupttabelle vorhanden sind. Da der Schlüssel keine doppelten Werte zulässt, schlägt die Prozedur fehl.
Eine Option wäre, eine where-Klausel in den insert proc einzufügen, aber die Hauptdatentabelle hat 10 Millionen + Zeilen, und das könnte lange dauern.
Gibt es eine andere Möglichkeit, die Prozedur dazu zu bringen, die Duplikate einfach zu überspringen/zu ignorieren, während sie versucht einzufügen?
Was ist, wenn die Spalte "Wert" in der Warteschlangentabelle anders ist, z. für die erste Reihe ist es "3253" anstatt "6541"? Ist das noch ein Duplikat? Wenn nicht, möchten Sie etwas aktualisieren (z. B. "6541 + 3253" in der Quelltabelle hinzufügen) oder einfach ersetzen? –
Die value-Spalte spielt keine Rolle, wenn sie anders ist, wird sie ignoriert, was im DataValue bereits für diesen Datumsstempel ist, sollte unverändert sein. – finoutlook
Es ist auch sehr nützlich, Ihre Frage mit der minimalen * Version * von SQL Server zu versehen muss unterstützen.Ich habe keine "MERGE" -Lösung angeboten, weil ich anfangs überhaupt keine Ahnung hatte, welche Version Sie verwenden. –