Fügen Sie Massendaten in SQL server ein, während Sie doppelte Zeilen ignorieren / erfassen

Ich habe eine Excel-file mit Zeilen zwischen 8000 – 10000. Ich konvertiere es in ein xml in c # und übergeben es an die gespeicherte Prozedur, um es in die Tabelle einzufügen.

Beim Einfügen der data, wenn es einen Eintrag gibt, der bereits in der database vorhanden ist, möchte ich ihn ignorieren / erfassen, während du die Zeilen einsetzt, ohne die Einfügung zu brechen.

Eine der Lösungen, die ich denke, ist, einen Insert-Trigger auf dem Tisch zu erstellen, um zu prüfen, ob die Zeile bereits in der Tabelle existiert oder nicht, aber dieser Ansatz ist sehr kostspielig für 10.000 Zeilen.

Was könnte noch der path sein? Unten ist der kurze Handcode

SELECT @sql = N' INSERT INTO Expenses ( '+ STUFF(@col,1,1,'') +') SELECT ' + STUFF(@col,1,1,'') + ' FROM #TEMPTABLE t PIVOT ( MAX([Value]) FOR AttributeName IN (' + STUFF(@col,1,1,'')+') ) as pvt' EXEC ( @sql ) 

Wenn Sie nur über doppelte Einträge bereits in der Tabelle betroffen sind, können Sie so etwas tun:

 with p as (<your pivot here>) insert into Expenses ( . . . ) select p.* from p where not exists (select 1 from Expenses e where e.entry = p.entry ); 

Das funktioniert für Ihren konkreten Fall okay – finden Sie Einträge, die sich bereits in der Tabelle befinden und sie vermeiden. Allerdings wird es keine Duplikate innerhalb der temporären Tabelle entfernen. Außerdem verknüpft es nicht bereits vorhandene data mit den neuen data.

Ich vermute, dass du wirklich merge willst. Wenn das oben ist nicht Ihr Problem zu beheben, dann fragen Sie eine andere Frage. Diese Frage gibt nicht genügend Informationen, um zu erklären, wie die merge Lösung aussehen würde. Die andere Frage hätte Beispieldaten und gewünschte Ergebnisse.