Überspringe einige Spalten in SqlBulkCopy

7

Ich verwende SqlBulkCopy gegen zwei SQL Server 2008 mit verschiedenen Spaltensätzen (um einige Daten von prod server nach dev zu verschieben). Ich möchte also einige Spalten überspringen, die noch nicht existierten / noch nicht entfernt wurden.

Wie kann ich das tun? Ein Trick mit ColumnMappings ?

Bearbeiten:

Ich mache das nächste:

%Vor%

und erhalten:

  

Das angegebene ColumnMapping stimmt mit keiner Spalte in der Quelle oder dem Ziel überein.

    
abatishchev 24.09.2010, 07:13
quelle

4 Antworten

15
%Vor%     
abatishchev 24.09.2010, 09:22
quelle
9

Wenn SqlBulkCopyColumnMapping verwendet wird, werden nur Spalten kopiert, für die Zuordnungen erstellt wurden.

Wenn Sie keine Zuordnung für eine Spalte erstellen, wird diese beim Kopiervorgang ignoriert.

Sie können dies im Demo-Code hier sehen - Die Beispielquelltabelle in der AdventureWorks-Demodatenbank enthält mehr Spalten als zugeordnet oder kopiert.

BEARBEITEN

Es ist schwierig, ohne weitere Informationen über das Datenbankschema sicher zu sein, aber bei einer Vermutung ist das Problem mit dieser Aussage:

%Vor%

Aus Ihrer Beschreibung geht hervor, dass nicht alle Spalten in der Quelltabelle in der Zieltabelle vorhanden sind. Sie benötigen einen Filter in Ihrer Konstruktionsschleife SqlBulkCopyColumnMapping , um Spalten zu überspringen, die nicht im Ziel vorhanden sind.

Mein C # ist nicht gut genug, um ein Beispiel zu geben, von dem ich überzeugt bin, dass es funktioniert, aber im Pseudocode wäre es

%Vor%

(Ich bin sicher, dass es möglich ist, dies in einen Lambda-Ausdruck umzuwandeln)

Beachten Sie, dass dies in dem Szenario, in dem die Spaltennamen übereinstimmen, aber die Datentypen nicht kompatibel sind, nicht besonders robust ist.

    
Ed Harper 24.09.2010 07:51
quelle
2

Ed Harper, so sieht es ohne Pseudocode aus (In diesem Fall von DataTable dt (vollständig definiert) zu einer vorhandenen Tabelle in der DB:

%Vor%     
LongChalk 18.09.2017 12:32
quelle
1

Versuchen Sie Folgendes: SqlBulkCopyColumnMapping-Klasse

Ich hoffe, Sie suchen nach dem gleichen

    
anishMarokey 24.09.2010 07:18
quelle